Схема работы инструкции
with
:
- Производится вычисление выражения, возвращающего объект, известный как
менеджер контекста
, который должен иметь методы __enter__
и __exit__
.
- Вызывается метод
__enter__
менеджера контекста. Возвращаемое значение метода присваивается переменной в предложении as
, если оно имеется, в противном случае значение просто уничтожается.
- Затем выполняется блок программного кода, вложенный в инструкцию
with
.
- Если при выполнении блока возбуждается исключение, вызывается метод
__exit__(тип, значение, диагностическая информация)
, которому передается подробная информация об исключении. Если этот метод возвращает ложное значение, исключение возбуждается повторно, в противном случае исключение деактивируется. Обычно исключение следует возбуждать повторно, чтобы оно могло выйти за пределы инструкции with
.
- Если в блоке
with
исключение не возникает, метод __exit__
все равно вызывается, но в аргументах тип, значение,
и диагностическая информация
ему передается значение None.
GitHub Источник: Лутц М. Изучаем Python, 4-е издание. — Пер. с англ. — СПб.: Символ-Плюс, 2011, стр. 950.