一、urllib.error
python的urllib.error模塊主要是應對urllib.request在網絡請求過程中出現的異常而定義的異常處理類。主要有URLError和HTTPError兩個類,URLError的父類是OSError,HTTPError是URLError的子類。
1.urllib.error.URLError
URLError是OSError的子類,當請求過程中沒有網絡連接,域名映射的服務器不存在都會拋出異常。
屬性reason,說明產生異常的原因,返回一個字符串錯誤信息或者另外一個異常實例對象。
1 import urllib.request 2 import urllib.error 3 4 try: 5 request = urllib.request.Request('http://www.baidu.com/') 6 response = urllib.request.urlopen(request) 7 print(response.read().decode('utf-8')) 8 except urllib.error.HTTPError as e: 9 print('http error:%s' % e.reason) 10 except urllib.error.URLError as e: 11 print('url error:%s' % e.reason)
產生異常:
Request參數Url傳入一個不存在的域名地址www123.baidu.com或者直接拔掉網線(禁用網絡連接),程序就會拋出URLError
request = urllib.request.Request('http://www123.baidu.com/')
捕捉並打印異常信息:url error:[Errno 11004] getaddrinfo failed
2.urllib.error.HTTPError
HTTPError是URLError的子類,urllib.request.urlopen()請求過程中產生HTTP錯誤,例如資源不存在、身份授權異常,服務器內部錯誤等。
屬性code,返回http請求的狀態碼,例如200、404、500等
屬性reason,說明產生異常的原因,返回一個字符串錯誤信息。
屬性headers,urllib.request請求觸發HTTP Error異常,返回響應的請求頭headers信息。
1 import urllib.request 2 import urllib.error 3 4 try: 5 request = urllib.request.Request('https://www.cnblogs.com/123.html') 6 response = urllib.request.urlopen(request) 7 print(response.read().decode('utf-8')) 8 except urllib.error.HTTPError as e: 9 print('http error: http code :{0},error msg :{1}'.format(e.code, e.reason)) 10 except urllib.error.URLError as e: 11 print('url error:%s' % e.reason)
產生異常:
Request參數Url傳入一個不存在的頁面地址123.html,請求的資源不存在,程序就會拋出HTTPError異常
request = urllib.request.Request('https://www.cnblogs.com/123.html')
捕捉並打印異常信息:http error: http code :404,error msg :Not Found