測試環境為 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 區塊時會去呼叫.
- __enter__
沒有解決問題,試試搜尋本站其他內容