做一些API测试并尝试创建给定输入URL的函数,它将返回json响应,但是如果HTTP错误是响应,则将返回错误消息。
我以前使用的是urllib2,但是现在尝试使用请求。但是,无论错误如何,看来我的except块都不会执行。
testURL = 'http://httpbin.org/status/404'
def return_json(URL):
try:
response = requests.get(URL)
json_obj = response.json()
return json_obj
except requests.exceptions.HTTPError as e:
return "Error: " + str(e)
我从运行上面得到的结果...
<Response [404]>
如果您希望响应引发非200状态代码的异常,请使用response.raise_for_status()
。您的代码将如下所示:
testURL = 'http://httpbin.org/status/404'
def return_json(URL):
response = requests.get(testURL)
try:
response.raise_for_status()
except requests.exceptions.HTTPError as e:
# Whoops it wasn't a 200
return "Error: " + str(e)
# Must have been a 200 status code
json_obj = response.json()
return json_obj
您可以看出,这显然比此处的其他解决方案简单,并且不需要您手动检查状态代码。您还会发现一个问题,HTTPError
因为这raise_for_status
将会引发。捕捉RequestsException
是一个糟糕的主意。这将捕获诸如ConnectionError
s或TimeoutError
s之类的东西。这些都与您要捕获的东西没有相同的含义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句