捕获python中的特定HTTP错误

时间:2010-07-07 08:25:56

标签: python http urllib2 urllib

我想捕获一个特定的http错误而不是整个系列中的任何一个.. 我试图做的是 -

import urllib2
try:
   urllib2.urlopen("some url")
except urllib2.HTTPError:
   <whatever>

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

3 个答案:

答案 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)

蒂姆的回答在我看来是误导性的。特别是当urllib2没有返回预期的代码时。例如,此错误将是致命的(相信与否 - 下载网址时并不罕见):

  

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?

主题的更多信息