目录
urllib.error
(用 request.openurl() 都应该放在 try 中)
- URLError产生的原因:
- 没网
- 服务器链接失败
- 找不到指定服务器
- 是OSError的子类
- 案例1
- HTTPError, 是URLError的一个子类
- 案例2
- 两者区别:
- HTTPError是对应的HTTP请求的返回码错误, 如果返回错误码是400以上的,则引发HTTPError
- URLError对应的一般是网络出现问题,包括url问题
- 关系区别: OSError-URLError-HTTPError
- 最后值得注意的一点是,如果想用HTTPError和URLError一起捕获异常,那么需要将HTTPError放在URLError的前面,因为HTTPError是URLError的一个子类。如果URLError放在前面,出现HTTP异常会先响应URLError,这样HTTPError就捕获不到错误信息了。
- 如果不用上面的方法,也可以使用hasattr函数判断URLError含有的属性,如果含有reason属性表明是URLError,如果含有code属性表明是HTTPError。案例3
案例1 :
'''
URLError的使用
'''
from urllib import request, error
if __name__ == '__main__':
url = "http://www.baiiiiiiiiiidu.com"
try:
req = request.Request(url)
rsp = request.urlopen( req )
html = rsp.read().decode()
print(html)
except error.URLError as e:
print("URLError: {0}".format(e.reason))
print("URLError: {0}".format(e))
except Exception as e:
print(e)
案例2:
'''
URLError的使用
'''
from urllib import request, error
if __name__ == '__main__':
url = "http:iiiiiiiiidu//www.baidu.com/welcome.html"
url = "http://www.sipo.gov.cn/www"
try:
req = request.Request(url)
rsp = request.urlopen( req )
html = rsp.read().decode()
print(html)
except error.HTTPError as e:
print("HTTPError: {0}".format(e.reason))
print("HTTPError: {0}".format(e))
except error.URLError as e:
print("URLError: {0}".format(e.reason))
print("URLError: {0}".format(e))
except Exception as e:
print(e)
案例3:
'''
URLError的使用
'''
from urllib import request, error
if __name__ == '__main__':
#一个不存在的连接
url = "http://www.baidu.com/oooooo"
try:
req = request.Request(url)
rsp = request.urlopen( req )
html = rsp.read().decode()
print(html)
except error.URLError as e:
if hasattr(e, 'code')
print("HTTPError")
print(e.code)
elif hasattr(e, 'reason')
print("URLError")
print(e.reason)