Python requests返回400状态码时raise_for_status未抛异常问题咨询
问题原因分析
raise_for_status本身在未触发异常时的默认返回值就是None,你遇到的核心问题是400状态码没有触发该方法的异常抛出逻辑,本质是响应对象的判断规则被修改了。- 最常见的诱因来自你使用的
OAuth2Session(requests-oauthlib库提供的会话类),该类在部分配置场景下会自定义响应的ok属性判断规则,将400这类客户端错误状态码判定为合法响应,导致raise_for_status认为没有错误需要抛出。 - 少数情况是环境内对
requests.models.Response类的raise_for_status方法做了二次修改,仅对5xx服务端错误抛出异常,忽略了4xx类客户端错误。 - 老旧版本的requests/requests-oauthlib存在兼容bug,也可能导致该异常逻辑失效。
修复方案
- 最稳妥的方式是跳过默认的
raise_for_status,手动判断状态码抛出异常,适配你当前的API返回规则:
import requests if response.status_code >= 400: raise requests.HTTPError(f"请求失败,状态码:{response.status_code},错误详情:{response.json().get('errorMessage', response.text)}")
- 如果需要调用原生的
raise_for_status逻辑,可以直接调用requests原生类的方法传入当前响应对象,绕开会话类的自定义逻辑:
from requests.models import Response Response.raise_for_status(response)
- 升级依赖到最新稳定版,排除版本bug的影响:
pip install --upgrade requests requests-oauthlib
内容的提问来源于stack exchange,提问作者Matthijs Kramer
相关产品推荐
相关产品推荐

