Как работает `with` и контекстный менеджер?

with вызывает __enter__ контекстного менеджера, выполняет тело блока и затем __exit__, в том числе при исключении. Так удобно управлять файлами, блокировками и транзакциями.

Короткий ответ

Что ответить на собеседовании

with вызывает enter контекстного менеджера, выполняет тело блока и затем exit, в том числе при исключении. Так удобно управлять файлами, блокировками и транзакциями.

Подробный разбор

Ответ с пояснениями

with вызывает enter контекстного менеджера, выполняет тело блока и затем exit, в том числе при исключении. Так удобно управлять файлами, блокировками и транзакциями.

Значение после as — результат __enter__, не обязательно сам менеджер. __exit__ получает тип, значение и traceback исключения; истинный результат подавляет его. Если __enter__ сам завершился ошибкой, обычный выход для этого менеджера не вызывается, поэтому частичный захват ресурсов нужно обработать внутри входа. Пример with open(path) as file закрывает файл независимо от успешности чтения. Контекстный менеджер не обязательно связан с закрытием: он может временно менять состояние и затем восстанавливать его.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее