Встречается на собеседованиях • сегодня

Что такое контекстный менеджер в Python

Контекстный менеджер в Python — это объект, который управляет ресурсами, обеспечивая корректное выполнение кода при входе и выходе из контекста с помощью методов enter и exit.

Пример 1:

text
import time

class Timer:
    def __enter__(self):
        self.start = time.time()
        print("Таймер запущен")
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        end = time.time()
        print(f"Время выполнения: {end - self.start:.2f} сек")

Вызов

with Timer():
    time.sleep(1)
    print("Прошла 1 секунда")

#Вывод
Таймер запущен
Прошла 1 секунда
Время выполнения: 1.00 сек

text

_Пример 2: Кастомный контекстный менеджер (или наглядно что под коптом):_

class FileManager:
def enter(self):
        print("Открыли файл")
        return self

    def exit(self, exc_type, exc_value, tb):
        print(" Закрыли файл")
        return False  # Не подавлять исключения

Вызов

try:
    with FileManager():
        print("Читаем данные...")
        raise ValueError("Ошибка чтения")
except ValueError as e:
    print(f"Ошибка: {e}")
finally:
    print("Готово")

text

**Как это работает:**

**enter -** Выполняется при входе в **with** (подключение)

**try -** Основной код, может вызвать ошибку

**exit -** Всегда вызывается при выходе из **with**, даже при ошибке

**except -** Ловит исключение, если **exit** его не подавил

**finally -** Выполняется в любом случае - чистка, логирование и т.д.

**exit - гарантирует**, что ресурс (например, соединение) будет закрыт, **даже если в try произойдёт ошибка**.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы