Python 3.4+contextlibпонятие
contextlib.suppress
исключения
Подавляет указанные исключения. Аналог try/except pass. Читаемее и лаконичнее.
Синтаксис
contextlib.suppress(*exceptions)
with suppress(FileNotFoundError):
os.remove('file')
Главная ловушка: исключение гасит остаток блока with целиком, а не одну строку — выполнение продолжится уже после with, поэтому не кладите в один блок несколько шагов, если следующие обязаны выполниться. Подавляются и подклассы указанных исключений, так что suppress(Exception) проглотит вообще всё, включая опечатку в имени переменной. Годится только там, где вы точно знаете, что молча продолжить — правильно.
Примеры
import os
from contextlib import suppress
with suppress(FileNotFoundError):
os.remove('/nonexistent_file') # исключение подавлено
print('Continued normally') # → Continued normally
from contextlib import suppress
with suppress(KeyError):
d = {'a': 1}
print(d['missing']) # KeyError подавлен — печати нет
print('недостижимо')
print('ok') # → ok — блок прерван на первой ошибке
# Эквивалент через try/except
import os
try:
os.remove('no_file')
except FileNotFoundError:
pass
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности