В аналитическом скрипте вы делаете f = open("out.csv", "w") и иногда забываете вызвать f.close(). Как лучше всего избежать таких ошибок и гарантировать закрытие файла?
AХранить
f в глобальной переменной модуля и закрывать в самом конце скриптаBПолагаться на ОС и буфер: после
f.write(...) система сама сбрасывает данныеCОткрывать файл в режиме
a (append): данные сохраняются, закрытие не нужноDИспользовать
with open("out.csv", "w", encoding="utf-8") as f: для гарантииПравильный ответ. Контекстный менеджер
with гарантирует закрытие файла даже при возникновении исключения.Разбор
Если открывать файл вручную, легко забыть f.close(), особенно если в середине кода есть исключения или ранние return. Лучший практический подход — использовать with open(...) as f, тогда закрытие файла гарантируется автоматически даже при ошибке. Это важно и для корректного сброса данных на диск (flush), и для отсутствия блокировок файла при последующих чтениях. Глобальная переменная или режим a сами по себе не закрывают файл, а ОС не гарантирует своевременное закрытие.
Проверь себя · 1/3разбор после ответа
Есть строка
text = '{"user_id": 7, "active": true}'. Что вернёт json.loads(text)?Ещё вопросы по теме «Работа с файлами: JSON и CSV»
- Вы сохраняете результат анализа в файл отчёта. Что произойдёт, если выполнить `open("report.csv", "w")`, когда `report.csv` уже существует?
- Что гарантирует конструкция `with open("data.csv", "r") as f:` при чтении файла в Python?
- Есть строка `text = '{"user_id": 7, "active": true}'`. Что вернёт `json.loads(text)`?
- Вы читаете CSV с заголовком через `csv.DictReader(f)`. Что представляет собой `row` внутри цикла `for row in csv.DictReader(f):`?
- Вы хотите дописывать строки в файл лога `errors.log`, не удаляя то, что уже записано. Как открыть файл?
- Все вопросы по «Работа с файлами: JSON и CSV» →