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

Python中requests库响应对象在if条件中的判断行为问题

requests库HTTPError.response条件判断的坑

核心原因很明确:requests的Response类重写了布尔值转换的逻辑。在Python里,类可以通过__bool__方法(Python2是__nonzero__)自定义实例的真值判断规则,而Response类的规则是:只有状态码属于2xx(成功范围)的响应,布尔值才是True;像404、500这类错误状态的响应,哪怕实例本身不是None,bool(response)也会返回False。

看你的代码:

  • 第一个判断if error.response and error.response.status_code == 404里,error.response是404的响应实例,它的布尔值是False,所以条件直接短路,根本不会去检查后面的状态码,自然打不出"Not Found"。
  • 第二个判断if error.response is not None and ...是直接判断对象是否存在,完全不受Response的布尔规则影响,所以能正常触发判断。

那是不是必须用这种显式判断?没错。因为你要的是“response对象存在”这个前提,而不是“这个响应是成功的”。requests把Response的布尔值和响应成功绑定了,和其他语言里“非空即真”的惯用逻辑不一样,所以必须显式用is not None来判断对象是否存在,才能达到你想要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:12:06