我不知道如何处理不同的错误

Posted

技术标签:

【中文标题】我不知道如何处理不同的错误【英文标题】:I can't figure out how to handle different errors 【发布时间】:2021-11-26 06:26:20 【问题描述】:

我有一些代码正在生成以下响应:

请求失败:Google 返回了带有代码 429 的响应。

即使我正在打印 err 变量,我也无法触发任何这些 if 语句,因此我确切地知道它在说什么。我在这里做错了什么?

try:
    <---irrelevant code--->
except (ResponseError, RuntimeError, TypeError, NameError, KeyError) as err: 
    print("Key error: . , while querying  pausing".format(KeyError, err, stock))
    if err == 429:
        print("429 error")
        <---more actions--->
    if err == "The request failed: Google returned a response with code 429."
        print("429 error")
        <---more actions--->

【问题讨论】:

您说它正在产生“响应”-您的意思是说它正在“引发异常”。有很大的不同。响应将是一个字符串,不会被您的 except: 逻辑捕获。 我怀疑错误信息是 int 类型,你应该使用'429' 显示minimal reproducible example。尤其取决于您使用的是哪个库,确定是否发生错误并获取状态码的方式可能会有所不同。 err 的类型是相关的Exception 类之一。它永远不会等于 int 或 string... 这能回答你的问题吗? python exception message capturing 【参考方案1】:

这个问题缺少一些上下文,这里有一些概念上的错误。

    当您使用 try/except 块时,您是在尝试捕获代码中发生的错误!这可能与网络、不良语义或其他任何事情有关,但它实际上会引发异常。所以 try 块中的代码不是无关紧要的代码,非常重要的是我们知道你在做什么。 您试图捕获的所有异常都是类的实例。因此,err 它是一个对象,您尝试的比较没有意义。可以打印错误的原因是该对象具有 strrepr 函数。为了更好地理解:
try:
    raise EOFError
except EOFError as e:
    print(dir(e))

这将输出:

    阅读您的问题很难说您的代码是向您抛出一个您可以捕获的错误,或者它只是返回一个字符串,表明尽管代码运行完美,但请求已失败。

【讨论】:

以上是关于我不知道如何处理不同的错误的主要内容,如果未能解决你的问题,请参考以下文章

我不知道如何处理 SocketException 以满足我的需要

git status 给了我一些令人困惑的 iOS 配置文件,我不知道如何处理 [重复]

如何处理 CORS 错误代码?

制作决策树时如何处理数据

在flask中提交数据时如何处理错误

不知道如何处理大型数据库