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.