Как исправить ValueError: операция ввода-вывода в закрытом файле

Ошибка ValueError: операция ввода-вывода с закрытым файлом обычно возникает, когда вы «пытаетесь выполнить операцию с закрытым файлом». Если вы закроете файл по ошибке или не закроете его до выхода из программы, вы получите ошибку «операция ввода-вывода над закрытым файлом».

Существует два распространенных сценария, в которых «ValueError: операция ввода-вывода в закрытом файле» возникает ошибка:

  1. Когда вы забываете правильно сделать отступ в коде в операторе «with»
  2. Когда вы пытаетесь прочитать файл после его закрытия с помощью оператора close()

Причина № 1: Неправильный отступ

Выход

Вы можете видеть, что код возвращает ошибку. Это связано с тем, что мы попытались перебрать «read_file» вне нашего оператора with. Переменная «read_file» может читаться только внутри оператора with. После выполнения оператора with файл закрывается.

Как это исправить?

Чтобы исправить этот код, нам нужно сделать отступ для цикла for внутри оператора with.

Причина 2: доступ к закрытому файлу

Когда вы открываете файл с помощью оператора with, вам не придется закрывать файл в конце. Python автоматически закрывает файл после завершения выполнения блока выполнения.

Тем не менее, если у вас есть операция ввода-вывода за пределами блока with, вы столкнетесь с ошибкой, поскольку файл закрыт.

Добавьте следующий контент, чтобы создать текстовый файл с именем app.txt в папке вашего проекта.

Напишите программу на Python, которая открывает файл app.txt, считывает его содержимое, закрывает его, снова читает открытый файл и печатает его содержимое.

Выход

В этом примере функция open() открывает файл app.txt в режиме чтения.

Мы использовали функцию file.read() для чтения содержимого файла и сохранения его в переменной с именемcontents.

Чтобы закрыть файл, мы использовали метод file.close().

После закрытия файла программа снова пытается прочитать файл, но, поскольку файл уже был закрыт, интерпретатор выдает ошибку «ValueError: операция ввода-вывода в закрытом файле».

Как это исправить?

Оператор with open() позволяет вам открыть файл и автоматически закрыть его, когда вы закончите с ним работать. Оператор with open() автоматически закрывает файл, даже если генерируется исключение.

Выход

В приведенном выше коде функция open() и оператор with используются для открытия файла app.txt в режиме чтения.

Мы использовали функцию file.read() для чтения содержимого файла, сохранения его в переменной содержимого и печати.

Файл не закрывается явно; он закроется автоматически при выходе из блока «с оператором».

Затем программа снова пытается прочитать файл, но это работает, поскольку он все еще открыт в контексте оператора with.

Из вывода программы видно, что теперь, даже после печати содержимого, она не выдает ValueError.

Правильно сделайте отступ в своем коде в операторе with open()

Сделайте отступ в коде правильно и переместите его в оператор with, не смешивая табуляции и пробелы. Синтаксис with open() обеспечивает автоматическое закрытие файла даже в случае возникновения исключения.

Убедитесь, что вы не перепутали табуляцию и пробелы

Вы можете получить эту ошибку, если используете табуляцию и пробелы для обозначения строки кода.

Обязательно НЕ взаимодействуйте с файловым объектом за пределами блока with

Если вы попытаетесь взаимодействовать с файловым объектом вне оператора with open(), файл уже будет закрыт.

Использование функции open() вместо оператора with

Но следует помнить одну вещь: когда мы используем функцию open() без оператора «with open», нам придется закрыть файл вручную.

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python