2010-08-12 128 views
28

我想抓住的HTTP狀態代碼,一旦它提出了一個URLError例外:Python urllib2 URLError HTTP狀態碼。

我試過,但並沒有幫助:

except URLError, e: 
    logger.warning('It seems like the server is down. Code:' + str(e.code)) 
+1

奇怪。你可以粘貼你用來打開網址的代碼嗎? – 2010-08-12 08:07:09

回答

59

你不應該追趕URLError後檢查狀態代碼,因爲該異常可以在有可用的HTTP狀態代碼的情況下被提出,例如,當你」重新獲得連接拒絕錯誤。

使用HTTPError檢查HTTP特定的錯誤,然後用URLError檢查其他問題:

try: 
    urllib2.urlopen(url) 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 

當然,你可能會想要做的事不僅僅是打印錯誤代碼更聰明,但你明白了。

+2

爲了100%安全,您可能還需要檢查ValueError,因爲當輸入的URL無效或爲空時,urllib2.urlopen將拋出ValueError異常。 – zer0c00l 2011-07-25 02:01:26

1

不知道爲什麼你收到此錯誤。如果您正在使用urllib2這應該幫助:

import urllib2 
from urllib2 import URLError 

try: 
    urllib2.urlopen(url) 
except URLError, e: 
    print e.code 
+2

'URLError'對象沒有屬性'code'。 最好使用e.reason。 – joctee 2012-10-16 09:53:44