如何在Python中捕获特定的HTTP错误?
我有
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
但是我现在得到的是捕捉到任何类型的HTTP错误。我只想捕捉到指定网页不存在的情况(404错误)。
4 个回答
5
Tim的回答让我觉得有点误导,尤其是当urllib2
没有返回我们预期的代码时。举个例子,这个错误会很致命(信不信由你,这种情况在下载网址时并不少见):
AttributeError: 'URLError'对象没有'code'这个属性
虽然快速,但可能不是最好的解决方案,可以使用嵌套的try/except块来处理:
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError as err:
try:
if err.code == 404:
# Handle the error
else:
raise
except:
...
关于嵌套try/except块的更多信息,可以查看这个链接:在Python中,嵌套的try/except块算是一种好的编程实践吗?
50
适用于Python 3.x
import urllib.request
import urllib.error
try:
urllib.request.urlretrieve(url, fullpath)
except urllib.error.HTTPError as err:
print(err.code)
165
Python 3
from urllib.error import HTTPError
Python 2
from urllib2 import HTTPError
只需要捕获 HTTPError
,处理这个错误。如果不是404错误,就用 raise
把这个异常重新抛出。
可以查看这个 Python教程。
下面是一个完整的Python 2示例:
import urllib2
from urllib2 import HTTPError
try:
urllib2.urlopen("some url")
except HTTPError as err:
if err.code == 404:
<whatever>
else:
raise