Sobes.tech
Junior — Middle
67

Каким образом реализуется управление исключениями при использовании контекстного менеджера?

Компании, где спрашивали
СБЕР Бизнес

Ответ от нейросети

sobes.tech AI

Контекстный менеджер в Python реализует методы __enter__ и __exit__. Управление исключениями происходит в методе __exit__, который принимает три аргумента, описывающих исключение: тип, значение и трассировку.

Если внутри блока с контекстным менеджером возникает исключение, Python вызывает __exit__ с информацией об исключении. Если метод __exit__ возвращает True, то исключение считается обработанным и не распространяется дальше. Если возвращается False или None, исключение пробрасывается дальше.

Пример:

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

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

with MyContextManager():
    raise ValueError("Ошибка внутри контекста")
print("Программа продолжает работу")

В этом примере исключение ValueError будет перехвачено и подавлено, программа продолжит работу после блока with.