目錄
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)