上下文管理器和with塊
上下文管理器對象存在的目的是為了管理with塊,就像迭代器的存在是為了管理for循環一樣
with 語句存在的意義是對一些常用的 try/finally 結構予以簡化。這種結構能夠保障一段代碼在運行完成后實施某項操作,就算該段代碼因為 return 語句、異常或者 sys.exit() 調用而停止,也依舊執行指定的操作。finally 子句中的代碼往往用于釋放重要的資源,亦或是還原臨時變動的狀態。
上下文管理器接口包含了__enter__以及__exit__這兩個方法。當 with 語句開始執行的時候,Python 會在上下文管理器對象上啟用__enter__方法。待 with 塊運行完畢,或者因某些緣由終止之后,Python 會在上下文管理器對象上調用__exit__方法。
- __enter()__方法:當進入
with
語句時,__enter__()
方法會被調用。該方法通常用于執行一些準備工作,并返回一個資源對象,這個對象會被綁定到as
后的變量名上。 - __exit()__方法:當
with
語句塊執行結束時,無論是否發生了異常,__exit__()
方法都會被調用。該方法通常用于執行一些清理操作,比如關閉文件、釋放資源等。如果在with
語句塊中發生了異常,異常信息會作為參數傳遞給__exit__()
方法。
下面是一個精心設計的上下文管理器執行操作案例
import sysclass LookingGlass:def __enter__(self):# 將原始的 sys.stdout.wri