Python异常捕获时匹配429错误的if语句无法触发如何解决
问题原因
- 你捕获到的
err是异常类的实例对象,不是整数也不是纯字符串:你打印err时看到的文本是自动调用__str__方法输出的可读内容,直接用err == 429或者err == 错误字符串都会因为类型不匹配判断失败 - 第二个
if语句末尾遗漏了冒号,属于语法错误,就算条件符合也无法正常执行 - 额外问题:你打印日志的语句里直接填了
KeyError类,不管实际抛出的是你捕获列表里的哪种异常,都会错误打印Key error,实际应该取type(err)获取真实异常类型
修复方案
优先选择匹配状态码属性的方案(可靠性更高),如果异常没有对应属性再选择匹配字符串的方案:
try: <---irrelevant code---> except (ResponseError, RuntimeError, TypeError, NameError, KeyError) as err: # 修复日志打印的错误类型输出 print("Error: {}. {}, while querying {} pausing".format(type(err).__name__, err, stock)) # 方案1:如果异常类有status_code属性,优先用状态码判断(根据你用的库不同,属性名可能是err.status_code / err.response.status_code) if hasattr(err, "status_code") and err.status_code == 429: print("429 error") <---more actions---> # 方案2:转成字符串匹配,增加in判断适配可能的文本差异 elif "returned a response with code 429" in str(err): print("429 error") <---more actions--->
内容的提问来源于stack exchange,提问作者Jeremy Whittaker
相关产品推荐
相关产品推荐

