pos*_*nim 4 python error-handling http python-requests
向服务器发出请求,如下面的代码所示,我有状态码500,它没有被捕获为异常。输出为“ 500”,但我需要所有500个代码才能生成sys.exit()。request.exceptions.RequestException不会将500视为异常还是其他东西?请求模块文档http://docs.python-requests.org/en/latest/user/quickstart/#errors-and-exceptions对于此类中的内容不是很清楚。如何确保所有500个代码都生成sys.exit()?
import requests
import json
import sys
url = http://www.XXXXXXXX.com
headers = {'user':'me'}
try:
r = requests.post(url, headers=headers)
status = r.status_code
response = json.dumps(r.json(), sort_keys=True, separators=(',', ': '))
print status
except requests.exceptions.RequestException as e:
print "- ERROR - Web service exception, msg = {}".format(e)
if r.status_code < 500:
print r.status_code
else:
sys.exit(-1)
Run Code Online (Sandbox Code Playgroud)
从请求文档:
如果我们发出了错误的请求(4XX 客户端错误或 5XX 服务器错误响应),我们可以使用 Response.raise_for_status() 提出它:
Run Code Online (Sandbox Code Playgroud)>>> bad_r = requests.get('http://httpbin.org/status/404') >>> bad_r.status_code 404 >>> bad_r.raise_for_status() Traceback (most recent call last): File "requests/models.py", line 832, in raise_for_status raise http_error requests.exceptions.HTTPError: 404 Client Error所以,使用
r = requests.post(url, headers=headers)
try:
r.raise_for_status()
except requests.exceptions.HTTPError:
# Gave a 500 or 404
else:
# Move on with your life! Yay!
Run Code Online (Sandbox Code Playgroud)
如果您希望请求成功,但“非OK”响应引发错误,请调用response.raise_for_status(). 然后,您可以捕获该错误并进行适当处理。它将引发一个requests.exceptions.HTTPError使response对象挂在错误上的错误。
状态码500也不例外。处理请求时发生服务器错误,服务器返回了500。服务器的问题比请求更多。
因此,您可以取消try-except:
r = requests.post(url, headers=headers)
status = r.status_code
response = json.dumps(r.json(), sort_keys=True, separators=(',', ': '))
if str(status).startswith('5'):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4712 次 |
| 最近记录: |