Курс Python → Управление ресурсами в Python

Контекстные менеджеры в Python предоставляют удобный способ управления ресурсами, такими как файлы, сокеты или соединения с базой данных. Они позволяют нам гарантировать, что ресурсы будут корректно закрыты после завершения работы с ними, даже в случае возникновения исключения. Для создания контекстного менеджера нам нужно определить класс с методами __enter__ и __exit__, которые будут вызываться при входе и выходе из контекста соответственно.


class FileHandler:
    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()

В приведенном выше примере класс FileHandler представляет собой контекстный менеджер для работы с файлами. При использовании оператора «with» экземпляр этого класса будет автоматически открывать файл при входе в контекст и закрывать его при выходе из контекста. Это гарантирует, что ресурсы будут освобождены правильно, даже если в процессе обработки файла возникнет исключение.

Для использования созданного контекстного менеджера достаточно просто обернуть блок кода, который работает с файлом, в оператор «with» и указать созданный экземпляр класса:


with FileHandler('example.txt', 'r') as file:
    for line in file:
        print(line)

В данном примере мы открываем файл ‘example.txt’ для чтения и выводим его содержимое построчно. После завершения работы с файлом он будет автоматически закрыт благодаря контекстному менеджеру. Таким образом, использование контекстных менеджеров в Python позволяет нам писать более безопасный и чистый код, обеспечивая правильное управление ресурсами.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Проблемы с dict в Python
  2. Названия переменных
  3. Подписка на Kaspersky Team
  4. Распаковка с оператором *
  5. Измерение времени выполнения кода с использованием time
  6. Форматирование данных с помощью pprint
  7. Пересечение списков с использованием множеств
  8. Представление бесконечности в Python
  9. Запуск файлового сервера
  10. Проверка типов с использованием isinstance
  11. Частичное применение функций в Python
  12. Замена текста в Python
  13. Фильтрация данных в Python.
  14. Конкатенация строк в Python
  15. Создание вложенных циклов for
  16. Методы classmethod и staticmethod
  17. Расчет времени выполнения
  18. Работа с пакетами
  19. Аннотации типов в Python
  20. Сравнение строк в Python
  21. Замена элементов в списке с помощью генераторов списков
  22. Значения по умолчанию в Python
  23. Виртуальное окружение Python
  24. Принципы программирования
  25. Переворот последовательности
  26. Применение функции map() в Python
  27. Распаковка элементов последовательности
  28. Сортировка и обратный порядок
  29. Создание словаря через dict comprehension
  30. Глубокое копирование объектов
  31. Удаление элементов из списка в Python
  32. Оператор «not» в Python
  33. Проверка наличия элемента в списке
  34. Определение объема памяти объекта
  35. Безопасные SQL-запросы в Python 3.11
  36. Слияние словарей в Python 3.9
  37. Работа с f-строками 2.0
  38. Обход словаря в Python
  39. Установка и использование библиотеки google
  40. Метод __float__ в Python
  41. Поиск индекса элемента в списке
  42. Управление контекстом с помощью декоратора contextmanager
  43. Обработка исключений в Python
  44. Работа с комплексными числами
  45. Работа с IP-адресами в Python
  46. Основы работы со строками в Python

Marketello читают маркетологи из крутых компаний