11 urllib2 异常URLError和HTTPError
作者:互联网
在我们用urlopen
或opener.open
方法发出一个请求时,如果urlopen
或opener.open
不能处理这个response,就产生错误。
这里主要说的是URLError和HTTPError,以及对它们的错误处理。
URLError
URLError 产生的原因主要有:
- 没有网络连接
- 服务器连接失败
- 找不到指定的服务器
我们可以用try except
语句来捕获相应的异常。下面的例子里我们访问了一个不存在的域名:
# urllib2_urlerror.py
import urllib2
requset = urllib2.Request('http://www.ajkfhafwjqh.com')
try:
urllib2.urlopen(request, timeout=5)
except urllib2.URLError, err:
print err
运行结果如下:
<urlopen error [Errno 8] nodename nor servname provided, or not known>
urlopen error
,错误代码8,错误原因是没有找到指定的服务器。
HTTPError
HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字"响应状态码"。
如果urlopen
或opener.open
不能处理的,会产生一个HTTPError,对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态。
注意,urllib2可以为我们处理重定向的页面(也就是3开头的响应码),100-299范围的号码表示成功,所以我们只能看到400-599的错误号码。
# urllib2_httperror.py
import urllib2
requset = urllib2.Request('http://blog.baidu.com/itcast')
try:
urllib2.urlopen(requset)
except urllib2.HTTPError, err:
print err.code
print err
运行结果如下:
404
HTTP Error 404: Not Found
HTTP Error,错误代号是404,错误原因是Not Found,说明服务器无法找到被请求的页面。
通常产生这种错误的,要么url不对,要么ip被封。
改进版
由于HTTPError的父类是URLError,所以父类的异常应当写到子类异常的后面,所以上述的代码可以这么改写:
# urllib2_botherror.py
import urllib2
requset = urllib2.Request('http://blog.baidu.com/itcast')
try:
urllib2.urlopen(requset)
except urllib2.HTTPError, err:
print err.code
except urllib2.URLError, err:
print err
else:
print "Good Job"
运行结果如下:
404
这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。
标签:11,err,urlopen,urllib2,print,HTTPError,URLError 来源: https://blog.csdn.net/qq_20042935/article/details/100140798