все Python 3contextlibпонятие
contextlib
модуль
Инструменты для менеджеров контекста и оператора with: contextmanager, suppress, ExitStack.
Синтаксис
import contextlib
Модуль избавляет от написания класса с __enter__ и __exit__: декоратор @contextmanager превращает генератор с одним yield в менеджер контекста. Здесь же готовые suppress для игнорирования исключения, redirect_stdout и ExitStack для заранее неизвестного числа ресурсов. Частая ошибка — не обернуть yield в try/finally: тогда при исключении внутри with уборка не выполнится.
Примеры
from contextlib import contextmanager, suppress
@contextmanager
def tag(name):
print(f'<{name}>')
try: yield
finally: print(f'</{name}>')
with tag('b'): print('текст') # → <b> / текст / </b>
with suppress(KeyError): {}['нет']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности