Предположим, у нас есть следующие mod.py
:
def __enter__():
print("__enter__<")
def __exit__(*exc):
print("__exit__< {0}".format(exc))
class cls:
def __enter__(self):
print("cls.__enter__<")
def __exit__(self, *exc):
print("cls.__exit__< {0}".format(exc))
и следующее его использование:
import mod
with mod:
pass
Я получаю сообщение об ошибке:
Traceback (most recent call last):
File "./test.py", line 3, in <module>
with mod:
AttributeError: __exit__
Согласно документации, инструкция with
должна выполняться следующим образом (я считаю, что она не выполняется на шаге 2 и поэтому обрезает список):
- Выражение контекста (выражение, заданное в with_item) оценивается для получения менеджера контекста.
__exit__()
контекстного менеджера загружается для последующего использования.- Вызывается метод
__enter__()
менеджера контекста.- и т.д...
Насколько я понял, нет причин, по которым __exit__
не может быть найден. Есть ли что-то, что я пропустил, из-за чего модуль не может работать как менеджер контекста?