12.25 Python中with語句是幹什麼用的?

with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用後自動關閉、線程中鎖的自動獲取和釋放等。


其他的內容看下面的代碼:

一般訪問文件資源時我們會這樣處理:


Python中with語句是幹什麼用的?

這樣寫沒有錯,但是容易犯兩個毛病:

  1. 如果在讀寫時出現異常而忘了異常處理。
  2. 忘了關閉文件句柄。

以下的加強版本的寫法:

Python中with語句是幹什麼用的?

以上的寫法就可以避免因讀取文件時異常的發生而沒有關閉問題的處理了。代碼長了一些。


但使用 with 有更優雅的寫法:


Python中with語句是幹什麼用的?

with 的實現


Python中with語句是幹什麼用的?

當對象被實例化時,就會主動調用__enter__()方法,任務執行完成後就會調用__exit__()方法, 另外,注意到,__exit__()方法是帶有三個參數的(exc_type, exc_value, traceback), 依據上面的官方說明:如果上下文運行時沒有異常發生,那麼三個參數都將置為 None, 這裡三個參數由於沒有發生異常,的確是置為了 None, 與預期一致。


修改後不出異常了


Python中with語句是幹什麼用的?


分享到:


相關文章: