Языки программирования

With … as — менеджеры контекста

Конструкция with … as в Python используется для оборачивания выполнения блока инструкций менеджером контекста. Менеджеры контекста позволяют выделять и освобождать ресурсы строго по необходимости. Синтаксис конструкции with … as:
"with" expression ["as" target] ("," expression ["as" target])* ":"
    suite
В коде выше происходит выполнение:

  1. Выполняется выражение в конструкции with … as.
  2. Загружается специальный метод __exit__ для дальнейшего использования.
  3. Выполняется метод __enter__. Если конструкция with включает в себя слово as, то возвращаемое методом __enter__ значение записывается в переменную.
  4. Выполняется suite.
  5. Вызывается метод __exit__, причём неважно, выполнилось ли suite или произошло исключение. В этот метод передаются параметры исключения, если оно произошло, или во всех аргументах значение None, если исключения не было.

Для чего нужна конструкция with … as?

Самый распространённый пример использования этой конструкции — открытие файлов. Предположим, у вас есть две связанные операции, которые вы хотите исполнить в паре, поместив между ними блок кода. Менеджеры контекста позволяют сделать именно это. Например:
with open('some_file', 'w') as opened_file:
    opened_file.write('Hola!')
Код выше открывает файл, записывает в него данные и закрывает файл после этого. При возникновении ошибки при записи данных в файл менеджер контекста попробует его закрыть.
Самоучитель по Python