如何在Python中捕获特定的HTTP错误?

97 投票
4 回答
180536 浏览
提问于 2025-04-16 00:55

我有

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

撰写回答