在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的块一个很好的编程习惯?