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