Курс 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. Метод rxor для операции побитового исключающего «или»
  3. Модуль itertools: комбинации и перестановки
  4. Возврат нескольких значений
  5. Конкатенация строк с помощью join()
  6. Регистрация на TenChat
  7. SciPy: широкий функционал для математических операций
  8. Декораторы в Python
  9. Операторы увеличения и уменьшения переменной
  10. Метод join() для объединения элементов строки
  11. Добавление кнопки в tkinter
  12. Руководство по Pymorphy2
  13. HTTP-запросы с библиотекой Requests
  14. Создание новых списков
  15. Измерение времени выполнения с помощью time
  16. Python: отсутствие точек с запятыми
  17. Копирование объектов в Python
  18. Инициализация переменных
  19. Функции any() и all() в Python
  20. Оператор in в Python
  21. Класс-оболочка для словарей
  22. Удаление первого элемента списка
  23. Использование html-скриптов в Jupyter Notebook
  24. Атрибуты массивов в Numpy
  25. lru_cache оптимизация функций
  26. Создание namedtuple списком полей
  27. Эффективная конкатенация строк в Python
  28. Преобразование букв в нижний регистр
  29. Тестирование функции сложения
  30. Python enumerate() функции
  31. Создание списков в Python
  32. Python enumerate() для работы с индексами
  33. Доступ к локальным переменным
  34. Копирование списков в Python
  35. Python Метод sleep() времени
  36. Переменные в Python: сокращение гласных
  37. Преобразование документов в PDF с помощью Spire.Office
  38. Структуры данных в Python
  39. Concrete Paths — метод .with_suffix()
  40. Сокращение ссылок с pyshorteners
  41. Функции классификации комплексных чисел
  42. Условные выражения в Python
  43. Бесконечная проверка в Python
  44. Переменная с нижним подчеркиванием
  45. Codecademy в Telegram
  46. Автоматизация действий с Pyautogui
  47. Генерация фальшивых данных с Faker

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