我不知道如何处理不同的错误
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 它是一个对象,您尝试的比较没有意义。可以打印错误的原因是该对象具有 str 或 repr 函数。为了更好地理解:
try:
raise EOFError
except EOFError as e:
print(dir(e))
这将输出:
-
阅读您的问题很难说您的代码是向您抛出一个您可以捕获的错误,或者它只是返回一个字符串,表明尽管代码运行完美,但请求已失败。
【讨论】:
以上是关于我不知道如何处理不同的错误的主要内容,如果未能解决你的问题,请参考以下文章
我不知道如何处理 SocketException 以满足我的需要