urllib 的异常错误处理(总结)

时间:2024-05-22 10:17:17

        在我们用 urlopen 或 opener.open 方法发出一个请求时,如果 urlopen 或 opener.open 不能处理这个 response,就产生错误。
         这里主要说的是 URLError 和 HTTPError,以及对它们的错误处理。

一、URLError
       URLError 产生的原因主要有:
       没有网络连接 、服务器连接失败、找不到指定的服务器
       我们可以用 try except 语句来捕获相应的异常。下面的例子里我们访问了一个不存在的域名

urllib 的异常错误处理(总结)

它说明了错误代号是 11004,错误原因是 getaddrinfo failed即:没有获取到一个有效的网址服务器地址。

404 错误

urllib 的异常错误处理(总结)

2、HTTPError

         HTTPError 是 URLError 的子类,我们发出一个请求时,服务器上都会对应一个 response应答对象,其中它包含一个数字"响应状态码"。

          如果 urlopen 或 opener.open 不能处理的,会产生一个 HTTPError,对应相应的状态码,HTTP 状态码表示 HTTP 协议所返回的响应的状态

         注意,urllib 可以为我们处理重定向的页面(也就是 3 开头的响应码),100-299 范围的号码表示成功,所以我们只能看到 400-599 的错误号码。

urllib 的异常错误处理(总结)

HTTP Error,错误代号是 404,错误原因是 Not Found,说明服务器无法找到被请求的页面。通常产生这种错误的,要么 url 不对,要么 ip 被封

由于 HTTPError 的父类是 URLError,所以父类的异常应当写到子类异常的后面,

所以上述的代码可以这么改写:

urllib 的异常错误处理(总结)

这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。