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

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,也可能导致该异常逻辑失效。
修复方案
  1. 最稳妥的方式是跳过默认的raise_for_status,手动判断状态码抛出异常,适配你当前的API返回规则:
import requests

if response.status_code >= 400:
    raise requests.HTTPError(f"请求失败,状态码:{response.status_code},错误详情:{response.json().get('errorMessage', response.text)}")
  1. 如果需要调用原生的raise_for_status逻辑,可以直接调用requests原生类的方法传入当前响应对象,绕开会话类的自定义逻辑:
from requests.models import Response
Response.raise_for_status(response)
  1. 升级依赖到最新稳定版,排除版本bug的影响:
pip install --upgrade requests requests-oauthlib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:06