urllib/urllib2的正常行爲是如果在響應的頭部發送錯誤代碼(即404),則引發異常。urllib/urllib2返回的錯誤代碼和實際頁面
你如何根據不同的錯誤尋找具體的錯誤,即(40x或50x),做不同的事情。另外,如何讀取正在返回的HTML/JSON等實際數據(數據通常具有與HTML錯誤代碼不同的錯誤細節)
urllib/urllib2的正常行爲是如果在響應的頭部發送錯誤代碼(即404),則引發異常。urllib/urllib2返回的錯誤代碼和實際頁面
你如何根據不同的錯誤尋找具體的錯誤,即(40x或50x),做不同的事情。另外,如何讀取正在返回的HTML/JSON等實際數據(數據通常具有與HTML錯誤代碼不同的錯誤細節)
當發生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>
在urllib2
HTTPError
例外,也是一個有效的HTTP響應,所以你可以把一個HTTP錯誤是一個非同尋常的事件或有效的響應。但是在urllib
中,您必須繼承URLopener的子類並定義http_error_<code>
方法或重新定義http_error_default
來處理它們。
多米尼克,沒有返回acutal數據,我用異常代碼更新了問題。 – ismail 2009-11-26 13:54:53
感謝e.read()部分從我的代碼中丟失...... – ismail 2009-11-26 13:57:20
由於'URLError'沒有'code'屬性和'read()'方法本身,但只有它的子類'HTTPError'有。 – 2009-11-26 13:57:30