簡體   English   中英

在上下文管理器中捕獲異常

[英]Catch exceptions within context manager

試圖了解我應該如何捕獲/處理上下文管理器的異常:

import contextlib
import urllib

with contxtlib.closing( urllib.request.urlopen(some_url) ) as resp:
    return resp.read()

我知道在退出上下文管理器時,即使發生任何錯誤,上下文管理器也會關閉。 對於上面的示例,鑒於它們位於上下文管理器中,我如何捕獲closingurlopen異常? 有沒有辦法讓我使用try... except捕獲和處理closingurlopen的所有異常?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM