Python 自定義 with/as
with expression [as variable]:
with-block
with 語句的實際工作方式:
- 計算表達式,所得到的對象成為環(huán)境管理器, 它必須有
__enter__和__exit__方法; - 環(huán)境管理器的
__enter__方法會被調(diào)用。如果 as 子句存在,其返回值會賦值給 as 子語句中的變量,否則,直接丟棄。 - 代碼塊中嵌套的代碼會執(zhí)行。
- 如果 with 代碼塊引發(fā)異常,
__exit__(type, value, trackback)方法會被調(diào)用(帶有異常細節(jié))。如果此方法返回值為False,則異常會重新引發(fā)。否則,異常會終止。 - 如果 with 代碼塊沒有引發(fā)異常,
__exit__方法依然會被調(diào)用,其type,value以及trackback參數(shù)都會以None傳遞。