Что такое хороший шаблон, чтобы избежать дублирования кода при работе с различными типами исключений в Python, например.Я хочу обработать URLError и HTTPError simlar, но не совсем:
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
В этом примере я хотел бы избежать дублирования первого вызова logger.error.Учитывая, что URLError является родителем HTTPError, можно сделать что-то вроде этого:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
Другим подходом может быть использование isinstance, например.если бы URLError и HTTPError не были в цепочке наследования:
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
Какой из них мне лучше выбрать, есть ли другой лучший подход?