[英]Python exception for HTTP response codes
您只需在响应中调用Response.raise_for_status()
即可:
>>> import requests
>>> url = 'http://stackoverflow.com/doesnt-exist'
>>> r = requests.get(url)
>>>
>>> print r.status_code
404
>>> r.raise_for_status()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "requests/models.py", line 831, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found
这将针对任何4xx
或5xx
响应引发requests.HTTPError
。
有关更完整的示例,请参阅响应状态代码上的文档。
请注意,这不正是你问什么( status != 200
这不会引发例外) 201 Created
或204 No Content
,或任何的3xx
重定向-但是这是最有可能你想要的行为: requests
将只需按照重定向,如果您正在处理API,其他2xx
通常就可以了。
内置的Python异常可能不适合您正在做的事情。 您将希望子类化基类Exception
,并根据您要通信的每个方案抛出自己的自定义异常。
一个很好的例子是Python Requests HTTP库如何定义自己的异常 :
如果出现网络问题(例如DNS故障,拒绝连接等),请求将引发
ConnectionError
异常。在极少数情况下,HTTP响应无效,请求将引发
HTTPError
异常。如果请求
Timeout
则会引发Timeout
异常。如果请求超过配置的最大重定向数,则会引发
TooManyRedirects
异常。Requests显式引发的所有异常都是从
requests.exceptions.RequestException
继承的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.