Курс 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. Атрибуты массивов в Numpy
  2. Проверка на палиндром
  3. Подсчет элементов в Python
  4. Исправление ошибки NameError
  5. Объединение словарей в Python
  6. Динамические маршруты во Flask
  7. Декодирование байтов в строку
  8. Настройка Cron
  9. Python Метод del.
  10. Применение функции к каждому элементу списка
  11. Переопределение оператора % для объектов
  12. Преобразование чисел в восьмеричную строку
  13. Извлечение данных из JSON
  14. Срезы в Numpy
  15. Оператор морж в Python 3.8
  16. Метод join() для объединения элементов строки
  17. Проверка существования переменной с оператором :=
  18. Переворот строки с помощью срезов
  19. Конструктор в Python
  20. Присвоение и ссылки
  21. Деление в Python
  22. Явный импорт переменных
  23. Работа со строками в Python.
  24. Объединение словарей в Python
  25. Векторизация в Python с NumPy.
  26. Метод matmul для умножения матриц
  27. Преобразование кортежа в словарь.
  28. Тестирование модели в PyTorch
  29. Создание новых списков через list comprehensions
  30. Применение функций в Python
  31. Создание панели меню Tkinter
  32. Проверка окончания строки с помощью str.endswith()
  33. Поиск анаграмм с Counter
  34. Взаимодействие с sys
  35. Разделение строки в Python
  36. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  37. Метод Enumerate() для списков
  38. Руководство по Pymorphy2
  39. Итераторы в Python
  40. Работа со списками
  41. Функция enumerate() — Python
  42. ChainMap.new_child() — добавление нового словаря
  43. Декораторы в Python
  44. Логирование с Logzero

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