我想捕获一个特定的http错误,而不是整个家庭中的任何一个..我想做的是-
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
但是我最终捕获的是任何一种HTTP错误,但是我只想在指定的网页不存在的情况下捕获!可能是HTTP错误404 ..但我不知道如何指定仅捕获错误404并让系统为其他事件运行默认处理程序。
Answers:
Python 3
from urllib.error import HTTPError
Python 2
from urllib2 import HTTPError
只是捕获HTTPError
,处理它,如果不是Error 404,只需使用raise
引发该异常即可。
请参阅Python教程。
例如Pyhton 2的完整示例
import urllib2
from urllib2 import HTTPError
try:
urllib2.urlopen("some url")
except HTTPError as err:
if err.code == 404:
<whatever>
else:
raise
urllib2
(毕竟,它已经存在了9年之久了),并且urllib3
它不是标准库的一部分,所以我认为这里不适合。如果还没有重复的内容,也许再问一个新问题?或urllib
按照下面Lazik的答案中所述使用。
对于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)
except urllib.error.HTTPError as err:
不使用导入命令的情况将得到catching classes that do not inherit from BaseException is not allowed httperror
很好的解决。
from urllib.error import HTTPError
。我编辑了帖子。
蒂姆斯的回答对我来说似乎是一种误导。特别是当urllib2不返回预期的代码时。例如,此错误将是致命的(信不信由你-下载URL时并不少见):
AttributeError:“ URLError”对象没有属性“ code”
快速但不是最好的解决方案是使用嵌套的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块主题的更多信息,python中的嵌套try / except块是一种好的编程习惯吗?