2009-11-26 29 views
4

urllib/urllib2的正常行爲是如果在響應的頭部發送錯誤代碼(即404),則引發異常。urllib/urllib2返回的錯誤代碼和實際頁面

你如何根據不同的錯誤尋找具體的錯誤,即(40x或50x),做不同的事情。另外,如何讀取正在返回的HTML/JSON等實際數據(數據通常具有與HTML錯誤代碼不同的錯誤細節)

回答

7

當發生HTTP錯誤時,urllib2會提高HTTPError。您可以使用異常對象上的code來獲取響應代碼。您可以使用read()獲得響應數據:

 
>>> req = urllib2.Request('http://www.python.org/fish.html') 
>>> try: 
>>>  urllib2.urlopen(req) 
>>> except urllib2.HTTPError, e: 
>>>  print e.code 
>>>  print e.read() 
>>> 
404 
<actual data response will be here> 
+0

多米尼克,沒有返回acutal數據,我用異常代碼更新了問題。 – ismail 2009-11-26 13:54:53

+0

感謝e.read()部分從我的代碼中丟失...... – ismail 2009-11-26 13:57:20

+0

由於'URLError'沒有'code'屬性和'read()'方法本身,但只有它的子類'HTTPError'有。 – 2009-11-26 13:57:30

1

urllib2HTTPError例外,也是一個有效的HTTP響應,所以你可以把一個HTTP錯誤是一個非同尋常的事件或有效的響應。但是在urllib中,您必須繼承URLopener的子類並定義http_error_<code>方法或重新定義http_error_default來處理它們。