Короткий ответ Контекстный менеджер — объект, который гарантирует корректное освобождение ресурсов вроде файлов и соединений с помощью оператора with. Метод __enter__() выполняется при входе в блок, а __exit__() — при выходе, который происходит всегда, даже если возникло исключение. Как это работает подробнее Конструкция with избавляет от ручной очистки ресурсов и заменяет громоздкие связки try/finally. События входа и выхода. Код внутри with выполняется между __enter__() и __exit__(), а выход гарантирован и при нормальном завершении, и при ошибке. Сигнатура __exit__(). Метод принимает тип исключения, значение и traceback; если ошибки не было, все три аргумента равны None. Классический пример. open() возвращает контекстный менеджер: файл автоматически закрывается на выходе из блока, вызывать close() явно не нужно. Цена утечки. Без закрытия ресурсов система может исчерпать файловые дескрипторы и соединения, замедлиться или упасть. Пример кода Что использовать на практике Файлы и соединения. Работай с ними чере