ValueError:Python 中关闭文件的 I/O 操作

ValueError:Python 中关闭文件的 I/O 操作

ValueError: I/O operation on closed file in Python

Python“ValueError: I/O operation on closed file”发生在我们试图对一个关闭的文件执行操作时。要解决该错误,请确保在使用该with open()
语句时缩进尝试正确访问文件的代码。

关闭文件上的 valueerror io 操作

下面是错误如何发生的示例。

主程序
import csv with open('employees.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) print(csvfile.closed) # 👉️ False # 👇️ forgot to indent code 👇️ # ⛔️ ValueError: I/O operation on closed file. print(csvfile.closed) # 👉️ True writer.writeheader() writer.writerow({'first_name': 'Alice', 'last_name': 'Smith'})

我们忘记缩进写入文件的代码,所以with open()
语句自动关闭了文件,我们对关闭的文件执行了 I/O 操作。

要解决这个错误,请确保正确缩进代码并将其移动到
with语句中,不要混用制表符和空格。

主程序
import csv with open('employees.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # ✅ code is now indented correctly writer.writeheader() writer.writerow({'first_name': 'Alice', 'last_name': 'Smith'}) writer.writerow({'first_name': 'Bob', 'last_name': 'Smith'})

with open()即使抛出异常,语法也会自动关闭文件

这是另一个例子。

主程序
file_name = 'example.txt' with open(file_name, 'w', encoding='utf-8') as my_file: # ✅ code is indented correctly my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n')
确保您没有在语句之后尝试访问文件的代码。 with open()

任何试图访问该文件的代码都需要正确缩进。

或者,您可以将文件对象存储到变量中并手动关闭它。

主程序
file_name = 'example.txt' my_file = open(file_name, 'w', encoding='utf-8') my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') my_file.close() # 👈️ manually close file

请注意,最好使用with open()语法,因为它会在我们完成后自动关闭文件。

您可以使用closed文件对象的属性来检查它是否已关闭。

主程序
file_name = 'example.txt' with open(file_name, 'w', encoding='utf-8') as my_file: # ✅ code is correctly indented my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') print(my_file.closed) # 👉️ False print(my_file.closed) # 👉️ True

最后一行代码没有缩进,所以此时文件已经关闭。

结论

Python“ValueError: I/O operation on closed file”发生在我们试图对一个关闭的文件执行操作时。要解决该错误,请确保在使用该with open()
语句时缩进尝试正确访问文件的代码。