urllib2 的異常錯誤處理
在我們用urlopen或opener.open方法發出一個請求時,如果urlopen或opener.open不能處理這個response,就產生錯誤。這裡主要說的是URLError和HTTPError,以及對它們的錯誤處理。
URLError
URLError 產生的原因主要有:
- 沒有網絡連接
- 服務器連接失敗
- 找不到指定的服務器
我們可以用try except語句來捕獲相應的異常。下面的例子裡我們訪問了一個不存在的域名:
運行結果如下:
urlopen error,錯誤代碼8,錯誤原因是沒有找到指定的服務器。
HTTPError
- HTTPError是URLError的子類,我們發出一個請求時,服務器上都會對應一個response應答對象,其中它包含一個數字"響應狀態碼"。
- 如果urlopen或opener.open不能處理的,會產生一個HTTPError,對應相應的狀態碼,HTTP狀態碼錶示HTTP協議所返回的響應的狀態。
- 注意,urllib2可以為我們處理重定向的頁面(也就是3開頭的響應碼),100-299範圍的號碼錶示成功,所以我們只能看到400-599的錯誤號碼。
運行結果:
HTTP Error,錯誤代號是404,錯誤原因是Not Found,說明服務器無法找到被請求的頁面。
通常產生這種錯誤的,要麼url不對,要麼ip被封。
由於HTTPError的父類是URLError,所以父類的異常應當寫到子類異常的後面,所以上述的代碼可以這麼改寫:
運行結果:404,這樣我們就可以做到,首先捕獲子類的異常,如果子類捕獲不到,那麼可以捕獲父類的異常。
HTTP響應狀態碼參考:
機器學習視頻下載:關注發私信(機器學習)可獲取下載鏈接
閱讀更多 互聯網奇點 的文章