【问题标题】:Is it possible to catch all exceptions for requests? (and generally, for a module)是否可以捕获请求的所有异常? (通常,对于一个模块)
【发布时间】:2017-08-16 04:46:22
【问题描述】:

我有一些代码可以进行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 的重复项 - 我的目标是一整类相关异常(如果其他情况引发异常,则允许崩溃,在我的情况下这将是一个错误)

【问题讨论】:

  • 对于requests,您始终可以使用RequestsException,所有这些都继承自我所看到的。您不能处理可能仅在同一模块中定义的异常(您可以全部捕获并过滤掉 except 子句中的内容,但这可能会变得混乱)。
  • @Marat:这不是重复的——我想捕获一整类相关异常,而不是“捕获除一个之外的所有异常”(我只会链接两个 except 实例)
  • @JimFasarakisHilliard:谢谢,您的 cmets 涵盖了 request 案例(我的直接问题)和一般案例(= 它无法完成,除了我在问题中提到的过滤)。你介意把它变成一个答案,以便我接受吗?

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


【解决方案1】:

优秀的库设计者通常会为他们的库创建一个基本异常,其他异常将从中派生。

对于requests,根据您链接的documentation,这是RequestException;在except 子句中使用它会捕获任何派生自它的东西。

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

如评论和问题中所述,不能自动根据定义的模块进行区分(即在except 子句表达式中;您必须添加在except 子句的正文中逻辑自己。

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2012-11-02
    • 1970-01-01
    • 2012-11-14
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多