Найти тему
С любовью о Python

Элегантное подавление исключений с contextlib.suppress

Оглавление
Designed by Freepik | https://ru.freepik.com
Designed by Freepik | https://ru.freepik.com

Бывает так, что какой-либо метод при работе программы выдает исключение, но нам не надо его обрабатывать каким-нибудь хитрым образом, а достаточно лишь подавить исключение и идти дальше.

Это можно сделать с помощью классического try-except, но есть и более элегантный способ. Когда это может пригодиться и как пользоваться? Об этом и поговорим в статье.

Зачем подавлять исключения?

Делать это без надобности строго не рекомендуется. Но бывают моменты, когда мы знаем, почему вызывается исключение и уверены, что оно не несет никаких рисков для нас. Поэтому мы временно можем его пропустить.

Конкретный пример:

Допустим, вы пишете автотест, и после создания некоторой сущности и выполнения манипуляций с ней, вам надо эту сущность удалить.

Все отрабатывает корректно, вот только запрос на удаление зависает в статусе pending и ответ не приходит, вызывается исключение по таймауту, но при этом сущность удаляется.

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

Как это сделать?

Рассмотрим 2 способа: канонический try-except и contextlib.suppress

Классический способ

-2

contextlib.suppress

Синтаксис

contextlib.suppress(*exceptions)

Пример:

-3

suppress возвращает контекстный менеджер, который подавляет переданные исключения, если они встречаются в теле выражения with.

Данный контекстный менеджер предлагает нам удобный способ работы с исключениями. Но не стоит забывать, что suppress cледует использовать только в специфических случаях.

***

Присоединяйтесь ко мне в Telegram: https://t.me/python3_with_love. Там есть все, и читать код намного удобнее.