09-检查错误
12.2.2 检查错误
正如你看到的, Response
对象有一个 status_code
属性,可以检查它是否等于 requests.codes.ok
,从而了解下载是否成功。检查成功与否有一种简单的方法,就是在 Response
对象上调用 raise_for_status()
方法。如果下载文件出错,将抛出异常;如果下载成功,就什么也不做。在交互式环境中输入以下代码:
>>> res = requests.get('https://inv/page_that_does_not_exist')
>>> res.raise_for_status()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Al\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\models
.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://inv/page_
that_does_not_exist.html
调用 raise_for_status()
方法是一种很好的方式,确保程序在下载失败时停止。这是一件好事:你希望程序在发生未预期的错误时马上停止。如果下载失败对程序来说不够严重,可以用 try
和 except
语句将 raise_for_status()
代码行包裹起来,处理这一错误,不让程序崩溃:
import requests
res = requests.get('https://inv/page_that_does_not_exist')
try:
res.raise_for_status()
except Exception as exc:
print('There was a problem: %s' % (exc))
这次 raise_for_status()
方法调用导致程序输出以下内容:
There was a problem: 404 Client Error: Not Found for url: https://
inv/page_that_does_not_exist.html
程序总是在调用 requests.get()
之后再调用 raise_for_status()
。确保下载成功后再让程序继续。