Python urllib2 URLError HTTP状态码。

32

我想在发生URLError异常时获取HTTP状态码:

我尝试过下面的方法但没有成功:

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

1
奇怪。你能贴出打开URL的代码吗? - Manoj Govindan
2个回答

65

在捕获URLError异常后,不应检查状态码,因为该异常可能会在没有HTTP状态码可用的情况下引发,例如当出现连接被拒绝错误时。

使用HTTPError来检查HTTP特定错误,然后使用URLError来检查其他问题:

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

当然,你可能希望做一些比仅仅打印错误代码更聪明的事情,但你已经有了这个想法。


2
为了百分之百的安全,您可能还需要检查 ValueError,因为当输入的 URL 无效或为空时,urllib2.urlopen 将抛出 ValueError 异常。 - zer0c00l

2

不确定为什么出现了这个错误。如果您正在使用 urllib2,那么这将有所帮助:

import urllib2
from urllib2 import URLError

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

4
“URLError”对象没有“code”属性。最好使用“e.reason”。 - joctee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接