Context manager — это конструкция Python, которая автоматически обрабатывает инициализацию и очистку ресурсов, гарантируя, что ресурсы вроде файлов, подключений к базам данных или блокировок будут правильно освобождены — даже если произойдёт ошибка. Используется с оператором with.
Реализуй два специальных метода в классе:
__enter__ — инициализирует и возвращает ресурс__exit__ — очищает ресурс и получает информацию об исключении, если оно произошлоclass FileManager:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
Используй декоратор @contextmanager из contextlib с функцией-генератором. Код перед yield выполняется при входе, а код после yield — при выходе. Блок try/finally гарантирует очистку даже если будет выброшено исключение.
from contextlib import contextmanager
@contextmanager
def open_file(name, mode):
f = open(name, mode)
try:
yield f
finally:
f.close()
with: with open_file("data.txt", "r") as f:Метод __exit__ в context manager на основе класса получает информацию об исключении как параметры, что позволяет ему обработать или подавить исключения перед очисткой ресурсов.
Новый — ещё не проверен сообществом
Вы