catch specific HTTP error in python
我想捕获一个特定的http错误,而不是整个家庭中的任何一个..
我想要做的是 -
1 2 3 4 5 | import urllib2 try: urllib2.urlopen("some url") except urllib2.HTTPError: <whatever> |
但我最终得到的是捕获任何类型的http错误,但我只想抓住指定的网页不存在!! 可能那是HTTP错误404 ..但我不知道如何指定只捕获错误404并让系统运行其他事件的默认处理程序..建议?
只需捕获
请参阅Python教程。
所以你可以这样做:
1 2 3 4 5 6 7 8 | import urllib2 try: urllib2.urlopen("some url") except urllib2.HTTPError as err: if err.code == 404: <whatever> else: raise |
对于Python 3.x
1 2 3 4 5 | import urllib.request try: urllib.request.urlretrieve(url, fullpath) except urllib.error.HTTPError as err: print(err.code) |
蒂姆的回答在我看来是误导性的。 特别是当urllib2没有返回预期的代码时。 例如,此错误将是致命的(相信与否 - 下载网址时并不罕见):
AttributeError: 'URLError' object has no attribute 'code'
快速,但也许不是最好的解决方案是使用嵌套try / except块的代码:
1 2 3 4 5 6 7 8 9 10 11 | import urllib2 try: urllib2.urlopen("some url") except urllib2.HTTPError, err: try: if err.code == 404: # Handle the error else: raise except: ... |
有关嵌套try / except块主题的更多信息在python中嵌套try / except块是一个很好的编程习惯吗?