Рубрики
Без рубрики

Python: Поймать несколько исключений в одной строке

В этой статье мы рассмотрели, как поймать несколько исключений в одной строке в Python, с примерами кода. Мы также рассмотрели некоторые плохие практики и способы их избежать.

Автор оригинала: Spencer Porter.

Python: Поймать несколько исключений в одной строке

Вступление

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

Оба эти метода помогут вам написать более доступный и универсальный код, который придерживается СУХИХ (не повторяйтесь) принципов.

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

try:
    do_the_thing()
except TypeError as e:
    do_the_other_thing()
except KeyError as e:
    do_the_other_thing()
except IndexError as e:
    do_the_other_thing()

Грубый.

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

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

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

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

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

try:
    do_the_thing()
except (TypeError, KeyError, IndexError) as e:
    do_the_other_thing()

Легко, правда?

Избегание Плохих Практик

“Ошибки никогда не должны проходить бесшумно”. – Дзен Python .

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

Неправильно используемые, они в конечном итоге становятся клише пьяниц и фонарных столбов, которые используются только тогда, когда интерпретатор Python начинает колядовать “12 ошибок Рождества”.

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

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

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

“Ошибки никогда не должны проходить бесшумно… если только явно не замолчать.”

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

from contextlib import suppress

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

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

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

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

А еще лучше, он также стандартен в любой версии Python 3.4 и выше !

Вывод

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