You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:15:05