Курс 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. Проверка типа объекта в Python
  2. Слияние словарей в Python 3.9
  3. Асинхронное программирование с asyncio
  4. Лямбда-функции в Python
  5. EMOT преобразование эмодзи в текст
  6. Работа с PosixPath() в Python
  7. Управление пакетами с pip
  8. Функция zip() — объединение последовательностей
  9. Получение локальных переменных в Python
  10. Ускоренный импорт библиотек
  11. Приближение чисел в Python
  12. Вычисление фазы комплексного числа
  13. Работа с CSV файлами
  14. Проверка элемента в множестве.
  15. Установка максимального количества цифр
  16. Работа с асинхронными задачами в Python
  17. Ветвление выражения в Python
  18. Преобразование строк в числа с плавающей запятой
  19. Получение пути к текущему скрипту с помощью os
  20. Разделение функций на этапы
  21. Расчет времени выполнения программы
  22. Генератор списка с условием if
  23. Метод join() для объединения строк
  24. Работа с классами данных
  25. Множественное присваивание в Python
  26. Округление чисел с помощью round
  27. Логирование в Python
  28. Вывод сложных структур данных с помощью pprint
  29. Создание словарей в Python
  30. Многострочные строки в Python
  31. Сравнение def и lambda в Python
  32. Структурирование данных с Pydantic
  33. Логические значения в Python
  34. Склеивание строк без циклов
  35. Изменение элемента списка
  36. Преобразование объекта в строку
  37. Измерение времени выполнения кода
  38. Функции в одну строку
  39. Работа со слайсами
  40. Операции с массивами в NumPy
  41. Именованные срезы в Python
  42. Docstring в Python
  43. Списковые включения в Python
  44. Создание вложенных циклов for
  45. Метод join() с набором
  46. Принципы SRP и OCP

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