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

Советы Python: Элегантная обработка исключений с ContextLib.

У Python очень элегантный и краткий способ обращения с исключениями, на мой вкус. Что более захватывающе, я … Помечено Python, Pythontips, Contextlib.

У 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”