Курс 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. Работа с изменяемыми коллекциями
  2. Транспонирование матрицы
  3. Форматирование объектов с модулем pprint
  4. Оптимизация сравнения в Python
  5. Синтаксис переменных цикла в Python
  6. Поиск наиболее частого элемента в списке
  7. Возврат нескольких значений
  8. Непрерывная проверка в Python
  9. Создание функций высшего порядка
  10. discard() — удаление элемента из множества
  11. Поиск шаблона в строке
  12. Декораторы с аргументами
  13. Обратный список чисел
  14. %pinfo: получение информации об объекте
  15. Именованные срезы в Python
  16. Создание задания в Cron
  17. Переопределение метода
  18. Defaultdict в Python
  19. Howdoi — получение ответов из терминала
  20. Работа с индексами списков
  21. capitalize() — изменение регистра первого символа строки
  22. Конкатенация строк с join() в Python
  23. Распаковка аргументов в Python
  24. Сравнение def и lambda функций в Python
  25. Python reversed() vs срез[::-1]
  26. Форматирование чисел в Python
  27. Метод difference_update() — разность множеств
  28. Создание новых списков в Python
  29. Использование метода lower()
  30. Удаление дубликатов в pandas
  31. Поиск индекса элемента
  32. Оптимизация интернирования строк
  33. Сокращение ссылок с pyshorteners
  34. Работа с множествами в Python
  35. Лямбда-функции в defaultdict
  36. Область видимости переменных в Python
  37. Отступы в Python
  38. Переопределение метода __rshift__
  39. Декораторы с @wraps
  40. Преобразование регистра строк
  41. Строковое представление объектов
  42. Lambda-функция в Python: использование с map() и sum()
  43. Поиск уникальных элементов строкой в Python
  44. Списки в Python
  45. Сглаживание списка
  46. Удаление дубликатов с помощью множеств
  47. Переопределение метода __and__

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