捕获python中的特定HTTP错误

Arn*_*pta 60 python http urllib urllib2

我想抓住一个特定的http错误,而不是整个家庭中的任何一个..我想要做的是 -

import urllib2
try:
   urllib2.urlopen("some url")
except urllib2.HTTPError:
   <whatever>
Run Code Online (Sandbox Code Playgroud)

但我最终得到的是捕获任何类型的http错误,但我只想抓住指定的网页不存在!! 可能那是HTTP错误404 ..但我不知道如何指定只捕获错误404并让系统运行其他事件的默认处理程序..建议?

Tim*_*ker 107

只需捕获HTTPError,处理它,如果它不是错误404,只需使用raise重新引发异常即可.

请参阅Python教程.

所以你可以这样做:

from urllib.error import HTTPError
Run Code Online (Sandbox Code Playgroud)


Laz*_*zik 38

对于Python 3.x

import urllib.request
from urllib.error import HTTPError
try:
    urllib.request.urlretrieve(url, fullpath)
except urllib.error.HTTPError as err:
    print(err.code)
Run Code Online (Sandbox Code Playgroud)


son*_*lob 5

蒂姆的回答在我看来具有误导性,尤其是当urllib2没有返回预期的代码时。例如,这个错误将是致命的(信不信由你 - 下载 url 时这种错误并不少见):

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:
        ...
Run Code Online (Sandbox Code Playgroud)

有关嵌套 try/except 块主题的更多信息python 中的嵌套 try/except 块是一种良好的编程习惯吗?