我一直使用:
r = requests.get(url)
if r.status_code == 200:
# my passing code
else:
# anything else, if this even exists
现在我正在处理另一个问题并决定允许其他错误并且现在使用:
try:
r = requests.get(url)
r.raise_for_status()
except requests.exceptions.ConnectionError as err:
# eg, no internet
raise SystemExit(err)
except requests.exceptions.HTTPError as err:
# eg, url, server and other errors
raise SystemExit(err)
# the rest of my code is going here
除了可以在此级别测试各种其他错误之外,一种方法是否比另一种更好?
原文由 Madivad 发布,翻译遵循 CC BY-SA 4.0 许可协议
Response.raise_for_status()
只是一种用于检查状态代码的内置方法,其作用与您的第一个示例基本相同。这里没有“更好”之分,只是个人对流量控制的偏好。我更喜欢使用 try/except 块来捕获任何调用中的错误,因为这会告知未来的程序员这些情况是某种错误。 if/else 不一定表示扫码出错。
编辑: 这是我的快捷模式。
但是,在大多数情况下,我将
requests.Session
子类化,创建一个自定义HTTPAdapter
来处理指数退避,并且上面的内容位于被覆盖的requests.Session.request
方法中可以在 此处 看到一个示例。