Что такое контекстный менеджер в Python
Python
Senior
Без компании
Что такое контекстный менеджер в Python
Ответы
**Контекстный менеджер в Python** — это объект, который управляет ресурсами, обеспечивая корректное выполнение кода при входе и выходе из контекста с помощью методов **enter** и **exit**.
*Пример 1:*
```
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 сек
```
*Пример 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("Готово")
```
**Как это работает:**
**enter -** Выполняется при входе в **with** (подключение)
**try -** Основной код, может вызвать ошибку
**exit -** Всегда вызывается при выходе из **with**, даже при ошибке
**except -** Ловит исключение, если **exit** его не подавил
**finally -** Выполняется в любом случае - чистка, логирование и т.д.
**exit - гарантирует**, что ресурс (например, соединение) будет закрыт, **даже если в try произойдёт ошибка**.