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.