当前位置:嗨网首页>书籍在线阅读

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() 方法是一种很好的方式,确保程序在下载失败时停止。这是一件好事:你希望程序在发生未预期的错误时马上停止。如果下载失败对程序来说不够严重,可以用 tryexcept 语句将 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() 。确保下载成功后再让程序继续。