在Python中捕获特定的HTTP错误

我想赶上一个具体的http错误,而不是整个家庭的任何一个..我正在试图做的是 –

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

但我最终是捕捉任何types的http错误,但我只想捕捉指定的网页不存在! 可能这是HTTP错误404 ..但我不知道如何指定只捕获错误404,并让系统运行其他事件的默认处理程序。

只要赶上urllib2.HTTPError ,处理它,如果它不是错误404,只需使用raise来重新引发exception。

看Python教程 。

所以你可以这样做:

 import urllib2 try: urllib2.urlopen("some url") except urllib2.HTTPError as err: if err.code == 404: <whatever> else: raise 

对于Python 3.x

 import urllib.request try: urllib.request.urlretrieve(url, fullpath) except urllib.error.HTTPError as err: print(err.code) 

蒂姆斯的回答在我看来是误导人的。 特别是当urllib2不返回预期的代码。 例如,这个错误将是致命的(相信与否 – 下载url时并不罕见):

AttributeError:'URLError'对象没有属性'code'

快,但也许不是最好的解决scheme将使用嵌套的try / except块的代码:

 import urllib2 try: urllib2.urlopen("some url") except urllib2.HTTPError, err: try: if err.code == 404: # Handle the error else: raise except: ... 

更多的信息嵌套尝试/除了块的主题嵌套尝试/除了在Python的块一个很好的编程习惯?