Python urllib2 HTTPError 异常没有给出所需的输出

Python urllib2 HTTPError exception doesn't give desired output

我正在使用 urllib2 获取内容为单行号的页面,然后将该数字与 ver 值进行比较。这是我的代码片段:

import urllib2

ver = '1.1'
p = urllib2.urlopen('http://www.someurl.com/text')
try:
    p
    for line in p:
        if line == ver:
            print "Current version:  %s" % ver
            print "Latest version:   %s" % line
            print "It's up to date."
        else:
            print "Current version:  %s" % ver
            print "Latest version:   %s" % line
            print "Needs updating."
except urllib2.URLError:
    print "Error, could not retrieve version number!"
except urllib2.HTTPError:
    print "Error, could not retrieve version number!"

我更改了几次 URL 以查看输出会如何变化。我添加了 URLError 异常作为对根本无法连接到页面的响应,它工作正常。输出是 Error, could not retrieve version number!

但是,当将 p 更改为某些返回 HTTP 404 错误的 URL 时,添加 HTTPError 异常并没有帮助。这是输出:

Traceback (most recent call last):
 File "/usr/local/bin/script", line 1337, in <module>
  p = urllib2.urlopen('http://www.someurl.com/text')
 File "/.../urllib2.py", line 127, in urlopen
  return _opener.open(url, data, timeout)
 ...
 similar error lines
 ...
urllib2.HTTPError: HTTP Error 404: Not Found

如何让 HTTPError 起作用?我发现一个异常有效而另一个异常无效,这很奇怪,除非我做的事情完全错误。

好的,我解决了我的问题。问题是,正如 Peter Wood 在评论中指出的那样,我的 URL 在 try/except 块的外面,所以我所要做的就是忘记 p就这样做:

try:
    for line in urllib2.urlopen('http://www.someurl.com/text'):
        if line == ver:
            #...

现在输出如预期的那样 Error, could not retrieve version number!