考虑以下Python代码,该代码尝试使用urllib.error.HTTPError
处理异常:
import urllib.error
from urllib.request import urlopen
try:
urlopen('https://python.org/dontexist')
except urllib.error.HTTPError as e:
print('status', e.code)
print('reason', e.reason)
此行为符合预期并返回:
status 404
reason Not Found
现在,检查urllib.error
的属性时,我注意到还有另外两个例外,分别是ContentTooShortError
和URLError
。如果我用HTTPError
代替URLError
,代码仍然可以按预期工作。 e.code
和e.reason
返回相同的输出。
except urllib.error.URLError as e:
print('status', e.code)
print('reason', e.reason)
因此,在以上示例中,URLError
或HTTPError
可以互换使用,但不能ContentTooShortError
互换使用。
然后的问题是:URLError
和HTTPError
的用例在本质上有什么区别?输出是相同的,我已经通读了[在线文档(https://docs.python.org/3/library/urllib.error.html),而没有获得任何新内容。
在什么情况下,您会发现/期望/期望URLError
异常而不是HTTPError
,反之亦然,因为它们的行为如此相似?任何示例都将真正有帮助。