我想捕获一个特定的http错误而不是整个系列中的任何一个.. 我试图做的是 -
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
但我最终得到的是任何类型的http错误,但我只想抓住指定的网页不存在!!可能那是HTTP错误404 ..但我不知道如何指定只捕获错误404并让系统运行其他事件的默认处理程序..建议??
答案 0 :(得分:105)
抓住urllib2.HTTPError
,处理它,如果不是错误404,只需使用raise
重新引发异常即可。
请参阅Python tutorial。
所以你可以这样做:
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError as err:
if err.code == 404:
<whatever>
else:
raise
答案 1 :(得分:35)
对于Python 3.x
import urllib.request
try:
urllib.request.urlretrieve(url, fullpath)
except urllib.error.HTTPError as err:
print(err.code)
答案 2 :(得分:3)
AttributeError:&#39; URLError&#39;对象没有属性&#39;代码&#39;
速度快,但也许不是最好的解决方案是使用嵌套try / except块的代码:
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError, err:
try:
if err.code == 404:
# Handle the error
else:
raise
except:
...
有关嵌套try / except块Are nested try/except blocks in python a good programming practice?
主题的更多信息