Python для новичков: менеджеры контекста `with`

Менеджеры контекста with … as в Python гарантируют выполнение критических операций, таких как закрытие файлов, даже при возникновении ошибок. Это особенно полезно при работе с ресурсами, требующими освобождения после использования.

Работа с файлами

Рассмотрим пример использования with … as для работы с файлами. Ниже представлен код, демонстрирующий работу с файлом:

with open('test.txt', 'w', encoding='utf8') as infile:
    number = input('Введите число: ')
    result = str(1 / float(number))
    print(result)
    infile.write(result)

Разберем код:

  • with open(‘test.txt’, ‘w’, encoding=’utf8′) as infile: — ключевое слово with запускает менеджер контекста. Функция open() открывает файл test.txt в режиме записи (‘w’) с кодировкой UTF-8. Результат работы open() (файловый объект) присваивается переменной infile.
  • number = input(‘Введите число: ‘) — запрашивает у пользователя ввод числа.
  • result = str(1 / float(number)) — вычисляет обратное значение введенного числа и преобразует результат в строку.
  • print(result) — выводит результат на консоль.
  • infile.write(result) — записывает результат в файл.

infile — переменная, через которую взаимодействуем с открытым файлом (запись, чтение и т.д.).

Обработка ошибок

Если пользователь введет не число, произойдет ошибка. Без with … as функция close() могла бы не выполниться, и файл остался бы открытым. Менеджер контекста гарантирует выполнение close(), даже при ошибках, обеспечивая закрытие файла и предотвращая потерю данных или блокировку доступа.

Проверка работы кода

Запустите код и введите число (например, 23). Результат вычисления будет выведен на консоль и записан в файл test.txt. При вводе не числа возникнет ошибка, но файл все равно будет закрыт.

Расширение возможностей

Менеджеры контекста with … as применимы не только для работы с файлами, но и с другими ресурсами, например, объектами классов. В этом случае гарантируется выполнение методов, аналогичных close(), обеспечивающих корректное освобождение ресурсов.

Использование менеджеров контекста with … as — хорошая практика в Python, обеспечивающая надежное управление ресурсами и обработку ошибок. Они гарантируют выполнение необходимых операций очистки, даже при некорректном завершении программы.

Что будем искать? Например,программа