我正在使用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!"
我更改了几次网址,看看输出会如何变化。我添加了URLError
异常作为对根本无法连接到页面的响应,并且它工作正常。输出为Error, could not retrieve version number!
但是,将p
更改为返回HTTP 404错误的某个网址时,添加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工作?我觉得奇怪的是,一个例外有效,另一个没有,除非我做错了。
答案 0 :(得分:0)
好吧所以我解决了我的问题。正如Peter Wood在评论中指出的那样,问题是我的网址位于try/except
区块的外部,所以我所要做的就是忘记p
而只是去做这样:
try:
for line in urllib2.urlopen('http://www.someurl.com/text'):
if line == ver:
#...
现在输出为Error, could not retrieve version number!
正如预期的那样。