print
該物件時的操作。__enter__
與 __exit__
可以用來實作與 with...as...
陳述句配合時的詳細過程,這樣的方法常使用在在開啟一個資源後,需要手動關閉該資源的情況,並且也能很好的處理過程中所拋出的異常。
with 陳述句一開始執行時,就會進入 __enter__()
方法,該方法回傳的物件,可以使用 as 指定給變數,接著就會執行 with 區塊中的程式碼。
同時如果 with 區塊中的程式碼發生例外,則會執行__exit__()
方法,並傳入三個參數,即例外處理中的 sys.exc_info() 所回傳的三個參數。
此時 __exit__()
方法若回傳 False
,則異常會被重新丟出,回傳 True
就跳過異常,通常 __exit__()
會傳回 False
以在 with 之外還可以處理例外。
如果 with 區塊中沒有發生異常而執行完畢,則也是執行 __exit__()
方法,此時 __exit__()
的三個參數都接收到 None
。
class Sample:
def __enter__(self):
print("in __enter__")
return "Foo"
def __exit__(self, exc_type, exc_val, exc_tb):
print("in __exit__")
def get_sample():
return Sample()
with get_sample() as sample:
print("Sample: ", sample)
Output :
in __enter__
Sample: Foo
in __exit__