Обработка нескольких исключений в Python

Как записать несколько исключений в одной строке?

В этой статье я расскажу о конструкции try/except, а именно, о том, как вы можете перехватывать несколько исключений в одной строке и как использовать метод suppress().

Введение

Методы, приведённые в статье, помогут вам в написании более доступного и универсального кода, который придерживается принципов DRY (don’t repeat yourself — не повторяться).

Давайте начнем с рассмотрения проблемы:

try:
    funt_one()
except TypeError as e:
    funt_two()
except KeyError as e:
    funt_two()
except IndexError as e:
    funt_two()

Как вы видите, это очень сырой код. Я повторяю один и тот же вызов несколько раз. Подобные практики могут превратить чтение и рефакторинг вашего кода в настоящий кошмар.

Вместо того чтобы писать исключения одно за другим, лучше сгруппировать все эти обработчики исключений в одну строку!

Несколько исключений

Если вам нужен только быстрый ответ, то все просто: используйте кортеж.

Все ошибки, содержащиеся в кортеже строки исключения, будут оценены вместе:

try:
    funt_one()
except (TypeError, KeyError, IndexError) as e:
    funt_two()

Довольно легко, верно?

Как избежать некачественного программирования

«Ошибки никогда не должны проходить бесшумно.» — The Zen of Python.

Предложения try/except, вероятно, являются наиболее часто используемым шаблоном в Python.

Очень заманчиво просто попробовать и сделать голое исключение для проблемы, чтобы «заставить ее уйти». Делая это, мы эффективно сметаем исключения под ковер, что является позором, особенно потому, что они могут быть удивительно полезны для восстановления после потенциально фатальных ошибок или для того, чтобы пролить свет на скрытые ошибки.

Вот почему при использовании предложений except вы всегда должны обязательно указывать ошибки, которые, как вы знаете, могут возникнуть, и исключать те, которые вы не знаете.

Позволить вашей программе потерпеть неудачу — это нормально, даже предпочтительнее, чем просто притворяться, что проблемы не существует.

«Ошибки никогда не должны проходить бесшумно… если только явно не замолчать.» — The Zen of Python.

Однако, если вдруг у вас есть возможность игнорировать обработку исключений, вы можете использовать функцию suppress():

Использование функции suppress

from contextlib import suppress 

with suppress(TypeError, KeyError, IndexError):
     func_one()

Метод suppress() принимает в качестве аргумента ряд исключений и выполняет try/except/pass с этими ошибками. Этот метод позволяет вам писать несколько исключений в одной строке.

Такой вариант позволит вам избежать написания try/except/pass вручную:

try:
    func_one()
except (TypeError, KeyError, IndexError) as e:
    pass

И ещё один плюс — этот метод также стандартен в любой версии Python 3.4 и выше!

Заключение

В этой статье я объяснил, как обрабатывать несколько исключений в одной строке. Я также показал некоторые плохие практики игнорирования исключений и использовал функцию suppress() для явного подавления исключений.

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Елена

    Отлично…

    Ответить
    1. Егор Егоров автор

      🙂

      Ответить