urllib.request模組(2):處理異常
阿新 • • 發佈:2020-12-02
1.URLError
該類來自urllib.error模組,由request模組產生的異常都可以通過捕獲這個類來處理。
開啟一個不存在的頁面,程式碼:
from urllib import request,error try: response=request.urlopen('https://cuiqingcai.com/index.htm') except error.URLError as e: print(e.reason)#屬性reason,用來返回錯誤的原因
執行結果:輸出Not Found
2.HTTPError
它是URLError的子類,專門用來處理HTTP請求錯誤。
它有三個屬性:
code:返回HTTP狀態碼,比如404表示頁面不存在。
reason:返回錯誤的原因。
headers:返回請求頭。
捕獲HTTPError異常,輸出code,reason,headers屬性
程式碼:
from urllib import request,error try: response=request.urlopen('https://cuiqingcai.com/index.htm') except error.HTTPError as e: print(e.reason,e.code,e.headers,sep='\n')
執行結果:
又由於URLError是HTTPError的父類,所以可以先選擇捕獲子類的錯誤,再去捕獲父類的錯誤
程式碼:
from urllib import request,error try: response=request.urlopen('https://cuiqingcai.com/index.htm') except error.HTTPError as e: print(e.reason,e.code,e.headers,sep='\n') except error.URLError as e: print(e.reason)
#如果不是HTTPError異常,就會捕獲URLError異常
else: print('Request Successfully')
#否則無異常
有時reason屬性返回的不一定是字串,也可能是一個物件。
程式碼:
import socket import urllib.request import urllib.error try: response=urllib.request.urlopen('https://www.baidu.com',timeout=0.01) except urllib.error.URLError as e: print(type(e.reason)) if isinstance(e.reason,socket.timeout):#用isinstance()方法來判斷reason的型別 print('TIME OUT')
執行結果:輸出
<class 'socket.timeout'>
TIME OUT
可以看出reason屬性的結果是socket.timeout類。
參考用書《python3網路爬蟲開發實戰》