在我们用 urlopen 或 opener.open 方法发出一个请求时,如果 urlopen 或 opener.open 不能处理这个 response,就产生错误。
这里主要说的是 URLError 和 HTTPError,以及对它们的错误处理。
一、URLError
URLError 产生的原因主要有:
没有网络连接 、服务器连接失败、找不到指定的服务器
我们可以用 try except 语句来捕获相应的异常。下面的例子里我们访问了一个不存在的域名
它说明了错误代号是 11004,错误原因是 getaddrinfo failed即:没有获取到一个有效的网址服务器地址。
404 错误
2、HTTPError
HTTPError 是 URLError 的子类,我们发出一个请求时,服务器上都会对应一个 response应答对象,其中它包含一个数字"响应状态码"。
如果 urlopen 或 opener.open 不能处理的,会产生一个 HTTPError,对应相应的状态码,HTTP 状态码表示 HTTP 协议所返回的响应的状态
注意,urllib 可以为我们处理重定向的页面(也就是 3 开头的响应码),100-299 范围的号码表示成功,所以我们只能看到 400-599 的错误号码。
HTTP Error,错误代号是 404,错误原因是 Not Found,说明服务器无法找到被请求的页面。通常产生这种错误的,要么 url 不对,要么 ip 被封
由于 HTTPError 的父类是 URLError,所以父类的异常应当写到子类异常的后面,
所以上述的代码可以这么改写:
这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。