Python: Менеджер контекста ‘with…as’ для файлов

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

Работа с файлами без менеджера with … as

Создадим переменную файл для работы с файлом:

файл = open('файл.txt', 'r')

Открываем файл файл.txt в режиме чтения (‘r’). Режим ‘r’ не создаёт файл, если он не существует; в этом случае возникает ошибка. Попробуем открыть несуществующий файл:

try:
    файл = open('файл.txt', 'r')
    print(файл.read())
    файл.close()
except FileNotFoundError:
    print("Файл не найден")

Запустив этот код, получим ошибку FileNotFoundError. Даже с обработкой ошибки через try-except, блок файл.close() может не выполниться, если ошибка произошла до него. Для гарантированного закрытия файла, даже при ошибке, нужно добавить файл.close() в блок finally:

try:
    файл = open('файл.txt', 'r')
    print(файл.read())
except FileNotFoundError:
    print("Файл не найден")
finally:
    файл.close()

Этот подход громоздкий и может приводить к ошибкам.

Использование менеджера with … as

Менеджер with … as решает эту проблему. Он автоматически закрывает файл после завершения блока кода, даже при ошибке:

try:
    with open('файл.txt', 'r', encoding='utf-8') as файл:
        print(файл.read())
except FileNotFoundError:
    print("Файл не найден")

Открываем файл с указанием кодировки utf-8. Ключевое слово as присваивает открытый файл переменной файл. После завершения блока with, файл автоматически закрывается. Если файл не существует, обработчик except выведет сообщение об ошибке.

Создадим файл файл.txt с текстом «Пример: Hello» и запустим код. Он выведет содержимое файла. Менеджер with … as обеспечивает безопасную и удобную работу с файлами, автоматически закрывая их независимо от ошибок.

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

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