是否可以捕获请求的所有异常? (通常,对于模块)

时间:2017-03-23 14:41:03

标签: python python-3.x exception exception-handling python-requests

我有一些代码会进行requests.get()调用,这可能会以各种方式失败。我想捕获requests个例外,但不关心调用失败的原因。

我想避免像

这样的代码
try:
    r = requests.get(url)
except:
    pass

因为它可能会捕获与requests无关的异常(在上面的情况下,这种情况很难发生,但如果有更多的代码则可能)。

requests例外是documented,但我不想列出所有例外情况。 有没有办法抓住它们,requests个例外的某种通配符?(更常见的是 - 模块提供的例外情况)

我也可以选择像

这样的东西
try:
    r = requests.get(url)
except Exception as e:
    print(e)

但我希望避免分析e来过滤掉requests例外情况。

注意:这不是question on handling all but one exception的重复 - 我的目标是一整类相关的异常(并且如果其他东西引发异常则允许崩溃,在我的情况下会是一个错误)< / p>

1 个答案:

答案 0 :(得分:2)

好的图书馆设计师通常为他们的图书馆创建一个基本例外,从中可以得到其他例外。

对于requests,根据您链接的documentation,这是RequestException;在except子句中使用它将捕获从中派生的任何内容。

try:
    # code involving requests 
    # that might err
except RequestException:
    # ignore, handle..  

如评论和问题中所述,基于他们所定义的模块进行区分不能自动(即在except子句表达式中;你&#39; d必须在except子句的主体中添加该逻辑。