問題:
python中 with語句可以幫助 打開和關閉一些東西,比如用open的時候,那如果在在with語句之前加上了try 在 with語句中如果出現異常了,走到exception 後,with還會對程序進行關閉嗎?
答案:
with是上下文管理器協議 實例如下:
try:
with open('xxx') as fin:
pass
except Exception:
pass
上下文管理器協議的本質就是【try-finally結構】:
try:
try:
fin = open('xxx')
pass
finally:
fin.close()
except Exception:
pass
再來要理解finally的本質:暫時壓制try子句中拋出的異常,直到finally子句執行完畢後,再將其重新拋出。
上面代碼中,如果內層try子句的pass部分出現了異常,會先被finally捕獲並處理,然後纔會進入外層的except子句。
那麼這個內層try子句的pass部分是什麼呢?就是with結構中的語句。所以with結構在任何情況下都能順利完成清理工作。