python3 with中異常的問題

問題:

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結構在任何情況下都能順利完成清理工作。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章