Загрузка...

Надёжно закрыть файл

На прошлой странице вы сами писали close, чтобы закрыть файл. Если программа останавливалась раньше этой строки, файл мог остаться открытым. with закрывает файл сразу, как только заканчиваются строки с отступом. Он делает это и тогда, когда одна из них останавливает программу.

на экране saved, а bread лежит в файле

python
with open("plate.txt", "w", encoding="utf-8") as plate:
    plate.write("bread\n")
print("saved")

На экране появляется только saved. Слово bread на экран не попадает: оно записано в plate.txt, потому что write выполнился, пока файл был открыт. Затем отступ закончился, файл закрылся, и только после этого сработал print. В этой программе нет close, и добавлять его не нужно ни после print, ни внутрь отступа. Имя plate обозначает открытый файл, но лишь до конца отступа. Параметр encoding="utf-8" сохраняет буквы как текст, а w по-прежнему стирает слова, которые лежали в файле раньше.

Строка с write сдвинута под with, и именно отступ делает её частью блока. У print("saved") отступа нет, поэтому она находится снаружи и выполняется, только если внутренняя часть дошла до конца.

Допустим, вы пишете 1 / 0 с тем же отступом. Программа остановится, и saved не появится. Файл при этом всё равно закроется: выход из отступа закрывает его раньше, чем программа завершится из-за остановки. Такой строки в программе этой страницы нет.

Следующая страница посвящена пути к файлу. Здесь мы только закрываем файл.

Файл закрывается, когда отступ заканчивается

Итог: на экране saved, в plate.txt лежит bread, а close в программе нет. Если строка внутри отступа остановит программу, файл всё равно закроется, а saved не появится. Дальше будет путь к файлу.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
5
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху