[英]Catch exceptions within context manager
試圖了解我應該如何捕獲/處理上下文管理器的異常:
import contextlib
import urllib
with contxtlib.closing( urllib.request.urlopen(some_url) ) as resp:
return resp.read()
我知道在退出上下文管理器時,即使發生任何錯誤,上下文管理器也會關閉。 對於上面的示例,鑒於它們位於上下文管理器中,我如何捕獲closing
和urlopen
異常? 有沒有辦法讓我使用try... except
捕獲和處理closing
和urlopen
的所有異常?
from contextlib import closing
from urllib.request import urlopen
from urllib.error import HTTPError, URLError
try:
with closing(urlopen(some_url)) as resp:
return resp.read()
except (HTTPError, URLError, Exception) as err:
print(err)
# handle exception(s)
contextlib.closing()
上下文管理器調用 close() 方法。 從文檔中可以看出,您不必自己顯式關閉它(用obj
替換page
作為上下文):
即使發生錯誤,退出 with 塊時也會調用 obj.close()。
對於urllib.request.urlopen
,請參閱使用urlopen
捕獲HTTPError or URLError
的方法
后續閱讀:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.