正如你看到的,Response 对象有一个 status_code 属性,可以检查它是否等于
requests.codes.ok,了解下载是否成功。检查成功有一种简单的方法,就是在 Response对象上调用
raise_for_status()方法。如果下载文件出错,这将抛出异常。如果下载成功,就什么也不做。在交互式环境中输入以下代码:
>>> res = requests.get('http://inventwithpython.com/page_that_does_not_exist')
>>> res.raise_for_status()
Traceback (most recent call last):
File "<pyshell#138>", line 1, in <module> res.raise_for_status()
File "C:\Python34\lib\site-packages\requests\models.py", line 773, in raise_for_status raise
HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found
raise_for_status()方法是一种很好的方式,确保程序在下载失败时停止。这是一件好事:你希望程序在发生未预期的错误时,马上停止。如果下载失败对程序来说
不够严重,可以用 try 和 except 语句将 raise_for_status()代码行包裹起来,处理这一错误,不让程序崩溃。
import requests
res = requests.get('http://inventwithpython.com/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
总是在调用 requests.get()之后再调用 raise_for_status()。你希望确保下载确实成功,然后再让程序继续。