python中的urlib2.URLError及其原因

python中的urlib2.URLError及其原因,python,web-scraping,urllib2,Python,Web Scraping,Urllib2,这个问题的标题可能有点混乱,但我真的不知道如何最好地表达它。。。 我发现了下面的代码块,它通过使用urllib2库从web下载网页 import urllib2 def download(url): try: html = urllib2.urlopen(url).read() except urllib2.URLError as e: print 'Download error:', e.reason html = None

这个问题的标题可能有点混乱,但我真的不知道如何最好地表达它。。。 我发现了下面的代码块,它通过使用urllib2库从web下载网页

import urllib2

def download(url):
    try:
        html = urllib2.urlopen(url).read()
    except urllib2.URLError as e:
        print 'Download error:', e.reason
        html = None
    return html
现在,如果
e.code
恰好是404,那么
e.reason
只是一个空字符串,这意味着它绝对不包含触发错误的信息,因此我不太理解在这里使用
e.reason
的意义。 似乎打印
e
更合理,但即使我将其更改为简单的
print e
,它仍然会产生一些尴尬的结果:
HTTP错误404:
,冒号后面显然是一个空字符串。。。
因此,在我看来,上述代码在异常处理方面有点笨拙。是吗?

如果您想查看404代码,您可以使用错误本身(打印e)或代码和原因(打印“下载错误:”,e.code,e.reason)。

是的,简单地使用
打印e
会更好。更常见的是根本不捕获异常,因为它似乎没有被处理。问题到底是什么?404表示未找到请求的资源。更好的方法是打印e,以了解更多细节。@wim我从一本书中获取了这段代码,对异常的处理方式有点困惑,所以我想我可能遗漏了什么…@ichbinblau是的,我知道,但出于某种原因,作者决定使用
e.reason
,这让我有些困惑。另一种方法是在浏览器中尝试url链接,看看会发生什么。至少要确保url返回内容。看起来是这样,我认为消息(如果有)必须是信息性的,这意味着不允许使用空字符串。我认为这只是常识。