Контекстный менеджер

1. Что такое контекстный менеджер

  • Контекстный менеджер управляет ресурсами, обеспечивая правильное открытие и закрытие.

  • Используется через конструкцию with.

  • Основная идея: гарантированное выполнение кода при входе и выходе из контекста, даже если возникла ошибка.


2. Синтаксис

with <context_manager> as <variable>:
    # код внутри контекста

3. Пример с файлом

with open("test.txt", "w") as f:
    f.write("Hello, world!")
# Файл автоматически закрыт после выхода из блока

✅ Не нужно вызывать f.close() вручную.


4. Пример с блокировками (threading.Lock)

  • Контекстный менеджер гарантирует, что блокировка освободится даже при ошибке.


5. Создание собственного контекстного менеджера

Вариант 1: через методы __enter__ и __exit__

Вывод:

Вариант 2: через декоратор contextlib.contextmanager


6. Применение в автоматизации тестирования

  • Файлы: чтение/запись тестовых данных.

  • WebDriver: запуск браузера и автоматическое закрытие.

  • Сессии API: requests.Session() через with для корректного закрытия соединения.

Last updated

Was this helpful?