Сообщить об ошибке.

Модуль contextlib в Python, создания менеджеров контекста

Утилиты для упрощенного создания менеджеров контекста

Модуль contextlib предоставляет утилиты для общих задач, включающих упрощенное создание менеджеров контекста оператора with.

Для получения дополнительной информации смотрите раздел "Тип менеджера контекста оператора with".


Ограничение обычных менеджеров контекста

Большинство контекстных менеджеров написаны таким образом, что они могут эффективно использоваться в операторе `with` только в один раз. Такие "одноразовые" менеджеры контекста должны создаваться заново каждый раз перед использованием.

Контекстные менеджеры c повторным входом

Менеджеры могут быть c повторным входом могут не только использоваться в нескольких операторах with, но также могут использоваться внутри оператора with, который уже использует тот же менеджер контекста

Многоразовые контекстные менеджеры

Примером многократно используемого менеджера контекста, но не менеджера с повторным входом (т. к. они также могут использоваться повторно), является класс `contextlib.ExitStack()`

Переменное количество контекстных менеджеров

Переменное количество контекстных менеджеров может быть необходима для управления пользовательским вводом, таким как открытие коллекции файлов заданных пользователем или из-за того, что некоторые из менеджеров контекста являются необязательными.

Менеджера контекста в качестве декоратора функции

Класс `contextlib.ContextDecorator` позволяет использовать менеджер контекста как в качестве декоратора функции, так и в обычном операторе `with`.

Замена try-finally менеджером контекста

Класс `contextlib.ExitStack()` позволяет вместо этого зарегистрировать обратный вызов для выполнения в конце оператора `with`, а затем позднее принять решение, что с этим обратным вызовом делать.

Перехват исключений из методов __enter__

Иногда желательно перехватывать исключения из реализации метода `__enter__`, без непреднамеренного перехвата исключений из тела оператора `with` или метода `__exit__` менеджера контекста.

Очистка ресурсов при неудачном завершении with

Как отмечено в документации к ExitStack.push(), этот метод может быть полезен для очистки уже выделенного ресурса, если последующие шаги в реализации __enter__() завершатся неудачно.

Декоратор @contextmanager модуля contextlib в Python

Функция `contextmanager()` модуля `contextlib` представляет собой декоратор, который можно использовать для определения фабричной функции для оператора контекстных менеджеров `with` без необходимости создавать класс или отдельные методы `__enter__()` и `__exit__()`.

Декоратор @asynccontextmanager модуля contextlib в Python

Функция `asynccontextmanager()` модуля `contextlib` аналогичен функции `contextmanager`, но создает асинхронный менеджер контекста.

Функция closing() модуля contextlib в Python

Функция `closing()` модуля `contextlib` возвращает менеджер контекста, который закрывает объект после завершения блока `with`.

Функция nullcontext() модуля contextlib в Python

Функция `nullcontext()` модуля `contextlib` возвращает менеджер контекста, который возвращает `enter_result` из метода входа в контекст `__enter__` или в противном случае ничего не делает.

Функция suppress() модуля contextlib в Python

Функция `suppress()` модуля `contextlib` возвращает менеджер контекста, который подавляет любое из указанных исключений, если они встречаются в теле оператора `with`, а затем возобновляет выполнение с первым оператором, следующим за концом оператора `with`.

Функции redirect_std*() модуля contextlib в Python

Функции `redirect_stdout()` и `redirect_stderr()` модуля `contextlib` представляют собой менеджеры контекста для временного перенаправления вывода `sys.stdout` или `sys.stderr` соответственно в другой файл или файловый объект.

Класс ContextDecorator() модуля contextlib в Python

Базовый класс `ContextDecorator()` модуля `contextlib` который позволяет использовать менеджер контекста в качестве декоратора.

Класс ExitStack() модуля contextlib в Python

Класс ExitStack() модуля contextlib менеджер контекста, разработанный для упрощения программного комбинирования других менеджеров контекста и функций очистки, особенно тех, которые являются необязательными или иным образом управляются входными данными.

Класс AsyncExitStack() модуля contextlib в Python

Класс AsyncExitStack() модуля contextlib асинхронный менеджер контекста, похожий на contextlib.ExitStack(), который поддерживает объединение как синхронных, так и асинхронных менеджеров контекста, а также наличие сопрограмм для логики очистки.

Функция aclosing() модуля contextlib в Python

Функция aclosing() модуля contextlib возвращает асинхронный менеджер контекста, который вызывает метод thing.aclose() объекта thing по завершении блока. Гарантирует, что асинхронный код выхода генератора выполняется в том же контексте, что и его итерации.

Функция AsyncContextDecorator() модуля contextlib в Python

Функция AsyncContextDecorator() модуля contextlib работает подобно ContextDecorator, но только для асинхронных функций.

Контекстный менеджер chdir() модуля contextlib в Python

Класс chdir() модуля contextlib безопасный контекстный менеджер для изменения текущего рабочего каталога. Не подходит для использования в большинстве многопоточных или асинхронных контекстов.