You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何在不修改raise_for_status()前提下捕获异常及状态码

捕获raise_for_status抛出的异常及状态码

不需要修改原raise_for_status()方法的代码,直接用try/except块捕获异常,就能提取出状态码,具体实现如下:

基础实现代码

try:
    # 替换成你实际调用raise_for_status的对象,比如response.raise_for_status()
    your_response_obj.raise_for_status()
except Exception as err:
    # 两种方式获取状态码
    # 方式1:从异常的response属性提取(最可靠,原方法抛出时传入了response=self)
    if hasattr(err, 'response'):
        status_code = err.response.status_code
    # 方式2:兼容原Python 2风格的raise语法,从args中取第一个元素
    else:
        status_code = err.args[0] if err.args else None
    
    # 处理捕获到的信息
    print(f"捕获到异常,状态码:{status_code}")
    print(f"异常详情:{str(err)}")

更精准的捕获方式

如果你明确知道抛出的是HTTPError,可以直接捕获该异常类型,代码更清晰:

# 根据你的实际模块导入HTTPError,比如如果是requests库的话:
# from requests.exceptions import HTTPError

try:
    your_response_obj.raise_for_status()
except HTTPError as err:
    # 直接从response属性获取状态码
    status_code = err.response.status_code
    print(f"状态码 {status_code}:{err}")

关键说明

  • 原方法使用的是Python 2风格的raise语法(raise self.status_code, HTTPError(...)),但在Python 3中捕获时依然可以正常获取异常对象。
  • 优先通过err.response.status_code获取状态码,因为原方法抛出HTTPError时已经把包含状态码的self(即响应对象)传入了异常,这是最稳定的获取方式,不受raise语法的影响。

内容的提问来源于stack exchange,提问作者iDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:44