我使用请求库和访问一个网站,从它收集数据与以下代码:
r = requests.get(url)
我想在输入不正确的URL并返回404错误时添加错误测试。如果我故意输入一个无效的URL,当我这样做:
print r
我明白了:
<Response [404]>
编辑:
我想知道如何进行测试。对象类型仍然相同。当我执行r.content或r.text时,我只得到自定义404页面的HTML。
我使用请求库和访问一个网站,从它收集数据与以下代码:
r = requests.get(url)
我想在输入不正确的URL并返回404错误时添加错误测试。如果我故意输入一个无效的URL,当我这样做:
print r
我明白了:
<Response [404]>
编辑:
我想知道如何进行测试。对象类型仍然相同。当我执行r.content或r.text时,我只得到自定义404页面的HTML。
查看r.status_code属性:
if r.status_code == 404:
# A 404 was issued.
演示:
>>> import requests
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.status_code
404
如果你想让请求引发错误码异常(4xx或5xx),调用r.raise_for_status():
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.raise_for_status()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "requests/models.py", line 664, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND
>>> r = requests.get('http://httpbin.org/status/200')
>>> r.raise_for_status()
>>> # no exception raised.
您还可以在布尔上下文中测试响应对象;如果状态码不是错误码(4xx或5xx),则认为它是' true ':
if r:
# successful response
如果你想更明确,使用If r.k:。
如果您的请求是在另一个函数内部发出的,但您希望在更高的级别捕获错误,那么最好知道您还可以直接从异常获取状态代码。在我的情况下,我不能访问响应,因为HTTPError是在我的函数能够传递响应之前引发的。最后我做了以下事情:
try:
r = function_calling_request(the_request)
except HTTPError as e:
if e.response.status_code == 404:
return do_stuff_if_not_found()