Python – with 語法

Loading

測試環境為 CentOS 8 x86_64 (虛擬機)

Python 使用 with 語法時,可以免除自行編寫 try 與 finially ,但只限定使用在 context manager class (內容管理員類別) 或是自行定義 __enter__ 與 __exit__ method (方法) 後面說明,參考文章 – https://peps.python.org/pep-0343/

使用 with 語法時.

with VAR = EXPR:
    BLOCK
which roughly translates into this:

非使用 with 語法時.

VAR = EXPR
VAR.__enter__()
try:
    BLOCK
finally:
    VAR.__exit__()
Now consider this example:

下面實際範例來讀取檔案來看一下使用與不使用 with 語法的差別,程式如下:

先編輯程式要開啟的檔案.

[root@localhost ~]# vi test.txt
Ben1
Ben2
Ben3
Ben4
Ben5
[root@localhost ~]# python3
Python 3.6.8 (default, Mar 25 2022, 11:15:52)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-10)] on linux
Type "help", "copyright", "credits" or "license" for more information.
  • 無 with
    非使用 with 時須自行處理關檔案這個動作.

    >>> try:
    ...     f = open('test.txt' , 'r')
    ... except Expection as e:
    ...     print (e)
    ... else:
    ...     data = f.read()
    ...     print(data)
    ... finally:
    ...     f.close()
    ...
    
    Ben1
    Ben2
    Ben3
    Ben4
    Ben5
    
  • with
    用 with 取代前面語法,我們沒有做關檔案這個動作.

    >>> with open('test.txt' , 'r') as f:
    ...     data = f.read()
    ...
    >>> print(data)
    Ben1
    Ben2
    Ben3
    Ben4
    Ben5
    

    上面我們沒有去關閉檔案,這是誰幫我們完成的.

    >>> f.closed
    True
    

    這是 我們定義好的 f 為 file objects (檔案物件) 透過 __exit__ method (方法) 去關閉檔案.

    file class (檔案類別) 為 context manager class (內容管理員類別) 有定義了 __enter__ 與 __exit__ method (方法).

    • __enter__
      開始使用 with 區塊時會去呼叫.
    • __exit__
      離開 with 區塊時會去呼叫.
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料