У Python очень элегантный и краткий способ обращения с исключениями, на мой вкус. Что более захватывающе, в том, что у него также есть другие методы, чтобы сделать ваш код еще более читабельным. Сегодня я собираюсь поделиться небольшим советом по использованию менеджера контекста для обработки «ленивых исключений».
Представьте, что вам нужно обрабатывать пару возможных ошибок и сообщите свою программу игнорировать их. Вы можете сделать это «долгий путь», используя старый добрый попробуйте
кроме
синтаксис:
try: do_a() try: do_b() except ExceptionB: pass except ExceptionA: pass
Выглядит довольно непостижимым и уродливым, не говоря уже о том случае, когда у вас есть несколько таких исключений для обработки. После Python Принципы «Квартира лучше, чем вложенное» Над «Просто лучше сложного» мы можем сломать его:
try: do_a() except ExceptionA: pass try: do_b() except ExceptionB: pass
Немного проще читать, но все же, довольно долго для простого «попытаться сделать A ()
и B ()
И если вы потерпите неудачу, просто продолжаете идти. Вот где contextlib
Модуль из стандартной библиотеки Python приходит к нашему спасению. contextlib
Обеспечивает утилиты для общих задач, связанных с с
Заявление, и, в нашем случае, может помочь нашему коду для достижения лучшей ясности:
from contextlib import suppress with suppress(ExceptionA): do_a() with suppress(ExceptionB): do_b()
Немного абстрактного, подумала. Документация Python Дает нам более практичный пример. Скажем, мы хотим удалить файл на случай, если он все еще существует в нашей системе. Если мы сделаем это обычным способом, мы напечатаем:
try: os.remove('somefile.tmp') except FileNotFoundError: pass
С подавлением, это будет как:
from contextlib import suppress with suppress(FileNotFoundError): # if you get this exception os.remove('somefile.tmp') # while trying to do this, go on
Две линии вместо четырех (ну, не подсчитание линии импорта). Неплохо, особенно если у вас есть несколько таких исключений для обработки.
Однако есть ограничение для использования этого метода. Используйте его только со специфическими исключениями, чтобы покрыть эти ошибки, в которых вы знаете, это нормально, чтобы продолжать идти (проходить). Если вам нужно дать конкретные инструкции, что делать, если что-то пойдет не так, чем трафиция попробуйте
кроме
подойдет вам лучше.
Надеюсь, тебе понравился мой пост! Если бы вы сделали, не забудьте это нравится. Спасибо:)
Оригинал: “https://dev.to/v_it_aly/python-tips-elegant-exception-handling-with-contextlib-suppress-2d0e”