urllib2 的異常錯誤處理

1在我們用urlopen或opener.open方法發(fā)出一個請求時,如果urlopen或opener.open不能處理這個response局骤,就產生錯誤。

這里主要說的是URLError和HTTPError暴凑,以及對它們的錯誤處理峦甩。

URLError

URLError 產生的原因主要有:

  1. 沒有網絡連接
  2. 服務器連接失敗
  3. 找不到指定的服務器

我們可以用try except語句來捕獲相應的異常。下面的例子里我們訪問了一個不存在的域名:

import urllib2

requset = urllib2.Request('http://www.ajkfhafwjqh.com')

try:
    urllib2.urlopen(request, timeout=5)
except urllib2.URLError, err:
    print err

運行結果如下:

<urlopen error [Errno 8] nodename nor servname provided, or not known>

HTTPError

HTTPError是URLError的子類现喳,我們發(fā)出一個請求時凯傲,服務器上都會對應一個response應答對象,其中它包含一個數字"響應狀態(tài)碼"嗦篱。

如果urlopen或opener.open不能處理的冰单,會產生一個HTTPError,對應相應的狀態(tài)碼灸促,HTTP狀態(tài)碼表示HTTP協議所返回的響應的狀態(tài)诫欠。

注意,urllib2可以為我們處理重定向的頁面(也就是3開頭的響應碼)腿宰,100-299范圍的號碼表示成功呕诉,所以我們只能看到400-599的錯誤號碼缘厢。

import urllib2

requset = urllib2.Request('http://blog.baidu.com/itcast')

try:
    urllib2.urlopen(requset)
except urllib2.HTTPError, err:
    print err.code
    print err

運行結果如下:

404
HTTP Error 404: Not Found

HTTP Error吃度,錯誤代號是404,錯誤原因是Not Found贴硫,說明服務器無法找到被請求的頁面椿每。
通常產生這種錯誤的,要么url不對英遭,要么ip被封间护。

改進版

由于HTTPError的父類是URLError,所以父類的異常應當寫到子類異常的后面挖诸,所以上述的代碼可以這么改寫:

import urllib2

requset = urllib2.Request('http://blog.baidu.com/itcast')

try:
    urllib2.urlopen(requset)

except urllib2.HTTPError, err:
    print err.code

except urllib2.URLError, err:
    print err

else:
    print "Good Job"

運行結果如下:

404

這樣我們就可以做到汁尺,首先捕獲子類的異常,如果子類捕獲不到多律,那么可以捕獲父類的異常痴突。

HTTP響應狀態(tài)碼參考:

1xx:信息

100 Continue
服務器僅接收到部分請求,但是一旦服務器并沒有拒絕該請求狼荞,客戶端應該繼續(xù)發(fā)送其余的請求辽装。
101 Switching Protocols
服務器轉換協議:服務器將遵從客戶的請求轉換到另外一種協議。

2xx:成功

200 OK
請求成功(其后是對GET和POST請求的應答文檔)
201 Created
請求被創(chuàng)建完成相味,同時新的資源被創(chuàng)建拾积。
202 Accepted
供處理的請求已被接受,但是處理未完成。
203 Non-authoritative Information
文檔已經正常地返回拓巧,但一些應答頭可能不正確斯碌,因為使用的是文檔的拷貝。
204 No Content
沒有新文檔肛度。瀏覽器應該繼續(xù)顯示原來的文檔输拇。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新贤斜,這個狀態(tài)代碼是很有用的策吠。
205 Reset Content
沒有新文檔。但瀏覽器應該重置它所顯示的內容瘩绒。用來強制瀏覽器清除表單輸入內容猴抹。
206 Partial Content
客戶發(fā)送了一個帶有Range頭的GET請求,服務器完成了它锁荔。


3xx:重定向

300 Multiple Choices
多重選擇蟀给。鏈接列表。用戶可以選擇某鏈接到達目的地阳堕。最多允許五個地址跋理。
301 Moved Permanently
所請求的頁面已經轉移至新的url。
302 Moved Temporarily
所請求的頁面已經臨時轉移至新的url恬总。
303 See Other
所請求的頁面可在別的url下被找到前普。
304 Not Modified
未按預期修改文檔∫佳撸客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)拭卿。服務器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用贱纠。
305 Use Proxy
客戶請求的文檔應該通過Location頭所指明的代理服務器提取峻厚。
306 Unused
此代碼被用于前一版本。目前已不再使用谆焊,但是代碼依然被保留惠桃。
307 Temporary Redirect
被請求的頁面已經臨時移至新的url。


4xx:客戶端錯誤

400 Bad Request
服務器未能理解請求辖试。
401 Unauthorized
被請求的頁面需要用戶名和密碼辜王。
401.1
登錄失敗。
401.2
服務器配置導致登錄失敗剃执。
401.3
由于 ACL 對資源的限制而未獲得授權誓禁。
401.4
篩選器授權失敗。
401.5
ISAPI/CGI 應用程序授權失敗肾档。
401.7
訪問被 Web 服務器上的 URL 授權策略拒絕摹恰。這個錯誤代碼為 IIS 6.0 所專用辫继。
402 Payment Required
此代碼尚無法使用。
403 Forbidden
對被請求頁面的訪問被禁止俗慈。
403.1
執(zhí)行訪問被禁止姑宽。
403.2
讀訪問被禁止。
403.3
寫訪問被禁止闺阱。
403.4
要求 SSL炮车。
403.5
要求 SSL 128。
403.6
IP 地址被拒絕酣溃。
403.7
要求客戶端證書瘦穆。
403.8
站點訪問被拒絕。
403.9
用戶數過多赊豌。
403.10
配置無效扛或。
403.11
密碼更改。
403.12
拒絕訪問映射表碘饼。
403.13
客戶端證書被吊銷熙兔。
403.14
拒絕目錄列表。
403.15
超出客戶端訪問許可艾恼。
403.16
客戶端證書不受信任或無效住涉。
403.17
客戶端證書已過期或尚未生效。
403.18
在當前的應用程序池中不能執(zhí)行所請求的 URL钠绍。這個錯誤代碼為 IIS 6.0 所專用舆声。
403.19
不能為這個應用程序池中的客戶端執(zhí)行 CGI。這個錯誤代碼為 IIS 6.0 所專用五慈。
403.20
Passport 登錄失敗纳寂。這個錯誤代碼為 IIS 6.0 所專用。
404 Not Found
服務器無法找到被請求的頁面泻拦。
404.0
沒有找到文件或目錄。
404.1
無法在所請求的端口上訪問 Web 站點忽媒。
404.2
Web 服務擴展鎖定策略阻止本請求争拐。
404.3
MIME 映射策略阻止本請求。
405 Method Not Allowed
請求中指定的方法不被允許晦雨。
406 Not Acceptable
服務器生成的響應無法被客戶端所接受架曹。
407 Proxy Authentication Required
用戶必須首先使用代理服務器進行驗證,這樣請求才會被處理闹瞧。
408 Request Timeout
請求超出了服務器的等待時間绑雄。
409 Conflict
由于沖突,請求無法被完成奥邮。
410 Gone
被請求的頁面不可用万牺。
411 Length Required
"Content-Length" 未被定義罗珍。如果無此內容,服務器不會接受請求脚粟。
412 Precondition Failed
請求中的前提條件被服務器評估為失敗覆旱。
413 Request Entity Too Large
由于所請求的實體的太大,服務器不會接受請求核无。
414 Request-url Too Long
由于url太長扣唱,服務器不會接受請求。當post請求被轉換為帶有很長的查詢信息的get請求時团南,就會發(fā)生這種情況噪沙。
415 Unsupported Media Type
由于媒介類型不被支持,服務器不會接受請求吐根。
416 Requested Range Not Satisfiable
服務器不能滿足客戶在請求中指定的Range頭曲聂。
417 Expectation Failed
執(zhí)行失敗。
423
鎖定的錯誤佑惠。


5xx:服務器錯誤

500 Internal Server Error
請求未完成朋腋。服務器遇到不可預知的情況。
500.12
應用程序正忙于在 Web 服務器上重新啟動膜楷。
500.13
Web 服務器太忙旭咽。
500.15
不允許直接請求 Global.asa。
500.16
UNC 授權憑據不正確赌厅。這個錯誤代碼為 IIS 6.0 所專用穷绵。
500.18
URL 授權存儲不能打開。這個錯誤代碼為 IIS 6.0 所專用特愿。
500.100
內部 ASP 錯誤仲墨。
501 Not Implemented
請求未完成。服務器不支持所請求的功能揍障。
502 Bad Gateway
請求未完成目养。服務器從上游服務器收到一個無效的響應。
502.1
CGI 應用程序超時毒嫡“┮希 ·
502.2
CGI 應用程序出錯。
503 Service Unavailable
請求未完成兜畸。服務器臨時過載或當機努释。
504 Gateway Timeout
網關超時。
505 HTTP Version Not Supported
服務器不支持請求中指明的HTTP協議版本

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末咬摇,一起剝皮案震驚了整個濱河市伐蒂,隨后出現的幾起案子,更是在濱河造成了極大的恐慌肛鹏,老刑警劉巖逸邦,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恩沛,死亡現場離奇詭異,居然都是意外死亡昭雌,警方通過查閱死者的電腦和手機复唤,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烛卧,“玉大人佛纫,你說我怎么就攤上這事∽芊牛” “怎么了呈宇?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長局雄。 經常有香客問我甥啄,道長,這世上最難降的妖魔是什么炬搭? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任蜈漓,我火速辦了婚禮,結果婚禮上宫盔,老公的妹妹穿的比我還像新娘融虽。我一直安慰自己,他們只是感情好灼芭,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布有额。 她就那樣靜靜地躺著,像睡著了一般彼绷。 火紅的嫁衣襯著肌膚如雪巍佑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天寄悯,我揣著相機與錄音萤衰,去河邊找鬼。 笑死热某,一個胖子當著我的面吹牛腻菇,可吹牛的內容都是我干的。 我是一名探鬼主播昔馋,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糖耸!你這毒婦竟也來了秘遏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤嘉竟,失蹤者是張志新(化名)和其女友劉穎邦危,沒想到半個月后洋侨,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡倦蚪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年希坚,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陵且。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡裁僧,死狀恐怖,靈堂內的尸體忽然破棺而出慕购,到底是詐尸還是另有隱情聊疲,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布沪悲,位于F島的核電站获洲,受9級特大地震影響,放射性物質發(fā)生泄漏殿如。R本人自食惡果不足惜贡珊,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涉馁。 院中可真熱鬧门岔,春花似錦、人聲如沸谨胞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胯努。三九已至牢裳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叶沛,已是汗流浹背蒲讯。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灰署,地道東北人判帮。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像溉箕,于是被迫代替她去往敵國和親晦墙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 一肴茄、網絡爬蟲的定義 網絡爬蟲晌畅,即Web Spider,是一個很形象的名字寡痰。把互聯網比喻成一個蜘蛛網抗楔,那么Spide...
    隨風化作雨閱讀 1,090評論 0 0
  • 1 前言 作為一名合格的數據分析師棋凳,其完整的技術知識體系必須貫穿數據獲取、數據存儲连躏、數據提取剩岳、數據分析、數據挖掘入热、...
    whenif閱讀 18,072評論 45 523
  • 一拍棕、概述 urllib2是Python的一個針對URLs的庫。他以urlopen函數的形式提供了一個非常簡單的...
    MiracleJQ閱讀 1,488評論 0 5
  • 本文是爬蟲系列文章的第一篇才顿,主要講解 Python 3 中的 urllib 庫的用法莫湘。urllib 是 Pytho...
    猴哥愛讀書閱讀 35,161評論 8 42
  • urllib2是Python的一個獲取URLs的組件。他以urlopen函數的形式提供了一個非常簡單的接口郑气,具有利...
    查無此人asdasd閱讀 1,501評論 0 3