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__