При программировании обычно выполнять операцию, которая, как ожидается, будет терпеть неудачу, но не должна бросать ошибку. В Python, Попробуйте/кроме
Положения часты. С точки зрения человека, Попробуйте/кроме
означает, «попробуйте эту операцию, и если она не удастся для «Например, вы можете попробовать следующее в своей консоли.
friends = {"Nguyen": "tacos", "Hannah": "borscht"} def get_food(friend_name): try: food = friends[friend_name] except KeyError: food = "baklava" friends[friend_name] = food return food get_food("Nguyen") # "tacos" get_food("Ahmed") # "baklava" friends # {'Nguyen': 'tacos', 'Hannah': 'borscht', 'Ahmed': 'baklava'}
Выше на простом языке: Если ключ не в словаре, не волнуйтесь, просто добавьте его с значением по умолчанию.
Что если у вас нет альтернативного курса действий? Что если вы просто хотите заставить замолчать ошибку? Допустим, вы хотите сделать каталог, и если каталог уже есть, не ныть об этом, просто игнорируйте. Некоторые разработчики используют Попробуйте/наконец
Также для этого случая:
import os os.mkdir("frivolous_directory") try: os.mkdir("frivolous_directory") except FileExistsError: pass
Таким образом, приведенные выше работа, это обычная практика, и не нужно делать никаких специальных импортов. Потрясающий. Нет стыда, если у вас есть веские основания использовать этот шаблон.
Однако, с точки зрения человека, вышеупомянутое Попробуйте/кроме
Блок читает так: сделайте каталог, но если это не удается, потому что он уже существует, тогда выполните следующее действие: мм, ничего.
Итак, из утилита Точка зрения, все работает нормально. Из Семантический Точка зрения, это не особенно значимо.
Значимая альтернатива: Contextlib.suppress
Если желание состоит в том, чтобы просто подавить ошибку, а не выполнять какую -то логику ветвления, в стандартной библиотеке Python есть парадигма для этого: contextlib.suppress ()
Анкет Это работает так:
import contextlib import os os.mkdir("frivolous_directory") with contextlib.suppress(FileExistsError): os.mkdir("frivolous_directory")
FileExisterror
В вышесказанном был замолчан.
Это было на две строки кода, чем предыдущий Попробуйте/кроме
Пример (ОК, мы должны были добавить Импорт контексталиб
, поэтому в этом примере меньше строки).
Что еще более важно, совершенно ясно, что происходит в коде. Мы не против, если операция не удастся по конкретной причине. Нет Пасс
с неясным намерением. Мы не попробуйте
что -то и не стремимся перехватить ошибку для дальнейшей логики или обработки.
Вывод
Это не так много о Работа Код, как и о читабельно и разумный код. Используя Contextlib.suppress
это достойная практика. Читая немного о сокровищах в контекст Может стоить вашего времени!
Оригинал: “https://dev.to/bowmanjd/suppressing-exceptions-in-python-with-contextlib-suppress-not-try-except-pass-141c”