Sobes.tech
Back to questions
Junior — Middle
85

Какие шаги необходимо предпринять для реализации собственного контекстного менеджера в Python?

Companies where asked
WINKWINK

Answer from AI

sobes.tech AI

Для реализации собственного контекстного менеджера в Python необходимо определить объект, который реализует методы:

  • __enter__(self) — вызывается при входе в контекст (with), возвращает объект, который будет привязан к переменной после as.
  • __exit__(self, exc_type, exc_val, exc_tb) — вызывается при выходе из контекста, принимает информацию об исключении (если оно было), позволяет обработать или подавить его.

Пример простого контекстного менеджера:

class MyContextManager:
    def __enter__(self):
        print("Вход в контекст")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Выход из контекста")
        if exc_type:
            print(f"Обработка исключения: {exc_val}")
        # Возвращаем True, чтобы подавить исключение
        return True

with MyContextManager() as cm:
    print("В теле with")
    raise ValueError("Ошибка")  # Исключение будет обработано и подавлено

Также можно использовать декоратор contextlib.contextmanager для создания контекстного менеджера на основе генератора, что упрощает код.