urllib.error可以捕获有urllib.request产生的异常。urllib.error有两个方法,URLError和HTTPError。
URLError是OSError的一个子类,HTTPError是URLError的一个子类,服务器上HTTP的响应会返回一个状态码,根据这个HTTP状态码,我们可以知道我们的访问是否成功。例如200状态码,表示请求成功,再比如常见的404错误等。
下面我们来学习这两个异常:
一, URLError
from urllib import request
from urllib import error
if __name__ == '__main__':
# 访问一部不存在的网站
url = "http://www.bucunzai.com/"
req = request.Request(url)
# 捕获异常
try:
response = request.urlopen(req)
html = response.read().decode("utf-8")
print(html)
except error.URLError as e:
# 输出异常
print(e.reason)
我们可以看见输出的结果是:
二, HTTPError
修改了捕获异常的的方法
from urllib import request
from urllib import error
if __name__ == '__main__':
# 访问一部不存在的网站
url = "http://www.douyu.com/Qcode.html"
req = request.Request(url)
# 捕获异常
try:
response = request.urlopen(req)
html = response.read().decode("utf-8")
print(html)
except error.HTTPError as e:
# 输出异常
print(e.code)
三, URLError和HTTPError混合使用
如果想用HTTPError和URLError一起捕获异常,那么需要将HTTPError放在URLError的前面,因为HTTPError是URLError的一个子类。如果URLError放在前面,出现HTTP异常会先响应URLError,这样HTTPError就捕获不到错误信息了。
四, 其他获取异常信息方法
使用hasattr函数判断URLError含有的属性,如果含有reason属性表明是URLError,如果含有code属性表明是HTTPError。