Рассмотрим следующий код 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
и наоборот, поскольку они ведут себя так же? Любые примеры действительно помогут.