2010-08-12 118 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