contextlib

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

contextlib.contextmanager(func)
Parameters

func – функция-генероатор

Декоратор, который создает менеджер контекста из функции-генератора. Декораторы используются, как показано ниже:

@contextmanager
def foo(args):
    statements
    try:
        yield value
    except Exception as e:
        error handling (if any)
    инструкции

Когда интерпретатор встречает инструкцию with foo(args) as value, он вызывает функцию-генератор с указанными аргументами, которая выполняется до первой встреченной инструкции yield. Значение, возвращенное инструкцией yield, помещается в переменную value. После этого начинается выполнение тела инструкции with. По завершении выполнения тела инструкции with возобновляется работа функции-генератора. Если внутри тела инструкции with возникнет какое-либо исключение, оно будет передано функции-генератору, где может быть обработано. Если ошибка не может быть обработана функцией-генератором, она должна повторно возбудить исключение.

contextlib.nested(mgr1, mgr2, ..., mgrN)

Функция, которая вызывает несколько менеджеров контекста mgr1, mgr2 и так далее, в виде единственной операции. Возвращает кортеж, содержащий различные возвращаемые значения инструкций with. Инструкция with nested(m1,m2) as (x,y): инструкции – это то же самое, что и инструкция with m1 as x: with m2 as y: инструкции. Следует заметить, что если во вложенном менеджере контекста будет перехвачено и обработано какое-либо исключение, внешние менеджеры не получат об этом никакой информации.

contextlib.closing(object)

Создает менеджер контекста, который автоматически вызовет метод object.close() по окончании выполнения тела инструкции with. Значением, возвращаемым инструкцией with, является сам объект object.