其他分享
首页 > 其他分享> > 11 urllib2 异常URLError和HTTPError

11 urllib2 异常URLError和HTTPError

作者:互联网

在我们用urlopenopener.open方法发出一个请求时,如果urlopenopener.open不能处理这个response,就产生错误。

这里主要说的是URLError和HTTPError,以及对它们的错误处理。

URLError

URLError 产生的原因主要有:

  1. 没有网络连接
  2. 服务器连接失败
  3. 找不到指定的服务器

我们可以用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应答对象,其中它包含一个数字"响应状态码"。

如果urlopenopener.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