Python:URLError与HTTPError的错误处理
Python中由urllib.request
引发的异常或错误都是由urllib.error
这个模块处理的。
urllib.error
中包含2个异常捕捉,URLError
和HTTPError
(实际上还有一个,不过太不常用),需要注意HTTPError
是URLError
的子类,即产生HTTPError
必定首先即产生了HTTPError
。
URLError
含有属性:reason
HTTPError
含有属性:code
,reason
,headers
所以显然HTTPError
产生仅限于出现的错误是具有HTTP
错误代码的,而类似网址错误、传输数据不完整等都不会触发HTTPError
。
下面是一种常用的错误处理方法:
import urllib.request
import urllib.error
url = ['http://www.pcbeta.com/a.html',
'http://b.con']
try:
a = urllib.request.urlopen(url[1])
except urllib.error.URLError as e:
if hasattr(e, 'code'): # 此时是HTTPError
print(e.code)
elif hasattr(e, 'reason'): # 此时是URLError
print(e.reason)
这里利用的是HTTPError
含有code
属性而URLError
不含有,来区别这两种异常。
下面是另一种错误处理方法:
import urllib.request
import urllib.error
url = ['http://www.pcbeta.com/a.html',
'http://b.con']
try:
a = urllib.request.urlopen(url[0])
except urllib.error.HTTPError as e: # 此时是HTTPError
print(e.code)
except urllib.error.URLError as e: # 此时是URLError
print(e.reason)
这里直接区别开了HTTPError
和URLError