urllib.error的URLError或HTTPError异常

时间:2019-03-27 09:53:12

标签: python http urllib urllib3

考虑以下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的属性时,我注意到还有另外两个例外,分别是ContentTooShortErrorURLError。如果我用HTTPError代替URLError,代码仍然可以按预期工作。 e.codee.reason返回相同的输出。

except urllib.error.URLError as e:
    print('status', e.code)
    print('reason', e.reason)

因此,在以上示例中,URLErrorHTTPError可以互换使用,但不能ContentTooShortError互换使用。

然后的问题是:URLErrorHTTPError的用例在本质上有什么区别?输出是相同的,我已经通读了[在线文档(https://docs.python.org/3/library/urllib.error.html),而没有获得任何新内容。

在什么情况下,您会发现/期望/期望URLError异常而不是HTTPError,反之亦然,因为它们的行为如此相似?任何示例都将真正有帮助。

0 个答案:

没有答案