如何解决Python使用with语句操作文件时出现I/O on closed file报错问题
错误原因
- 问题根源在
process1.py的实现逻辑:你在with代码块中将系统标准输出sys.stdout直接绑定到了Main.txt对应的文件对象上,with块执行结束后会自动关闭关联的文件资源,此时sys.stdout仍然指向这个已经被关闭的文件对象。 - 后续执行
print(x)操作时,print默认会向sys.stdout写入内容,因此触发了关闭文件的I/O操作报错,该报错和你读取Main.txt的逻辑本身无关。
修复方案
方案1:修改process1.py,备份并恢复原有标准输出(推荐)
重定向标准输出完成写入逻辑后,立刻还原默认输出,避免影响后续代码执行:
import sys # 备份原始标准输出 original_stdout = sys.stdout # 变量c提前定义的代码保留 c = 此处替换为你原本定义的c变量内容 with open("Main.txt", "w+") as f: sys.stdout = f eval(c) # 退出with块后立刻还原标准输出 sys.stdout = original_stdout
方案2:不修改process1.py,在导入后手动重置标准输出
如果你不想改动process1.py的代码,可以在读取打印的逻辑中先重置sys.stdout再执行打印操作:
import sys import process1 # 重置为系统原始标准输出 sys.stdout = sys.__stdout__ # 推荐用with语法读取文件,自动处理文件关闭 with open("Main.txt", "r") as f: for x in f: print(x)
内容的提问来源于stack exchange,提问作者Amrit Gangwar
相关产品推荐
相关产品推荐

