URLError или HTTPError исключения из urllib.error - PullRequest
0 голосов
/ 27 марта 2019

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

...