Python Glossary English

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Сообщить о неточности