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

Jupyter Notebook单元格无法执行完成,报I/O操作已关闭文件错误

Jupyter Notebook单元格执行报错:I/O operation on closed file

问题描述

在Jupyter Notebook中运行Python代码时,单元格无法执行完成并抛出错误,但相同代码在命令行环境下可正常运行。

报错信息

[IPKernelApp] ERROR | Exception in message handler:
Traceback (most recent call last):
  File "/Users/burcakotlu/developer/python/test_venv/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 424, in dispatch_shell
    await result
  File "/Users/burcakotlu/developer/python/test_venv/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 770, in execute_request
    sys.stderr.flush()
ValueError: I/O operation on closed file.
[IPKernelApp] ERROR | Error in message handler
Traceback (most recent call last):
  File "/Users/burcakotlu/developer/python/test_venv/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 529, in dispatch_queue
    await self.process_one()
  File "/Users/burcakotlu/developer/python/test_venv/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 518, in process_one
    await dispatch(*args)
  File "/Users/burcakotlu/developer/python/test_venv/lib/python3.9/site-packages/ipykernel/kernelbase.py", line 437, in dispatch_shell
    sys.stderr.flush()
ValueError: I/O operation on closed file.

环境依赖版本

$ pip list | grep -E "(^jup|^ipy)"
ipykernel                  6.27.1
ipython                    8.18.1
jupyter_client             8.6.0
jupyter_core               5.5.0

解决方案

针对sys.stderr.flush()触发的关闭文件I/O错误,可按以下步骤排查修复:

  • 检查代码对标准流的修改
    排查代码中是否存在手动关闭sys.stderr/sys.stdout,或重定向到已关闭文件对象的操作。命令行与Jupyter的标准流管理逻辑不同,这类操作在Notebook中会导致内核输出异常。若有此类操作,确保执行完相关逻辑后恢复标准错误流。

  • 重置内核并重启Notebook
    内核可能因之前的异常操作处于异常状态,关闭当前Notebook,重启Jupyter服务后重新启动内核,再运行代码测试。

  • 降级ipykernel版本
    部分新版本ipykernel存在标准流处理bug,尝试降级到稳定版本:

    pip install ipykernel==6.25.2
    

    安装完成后重启内核验证。

  • 修复虚拟环境依赖
    若虚拟环境依赖损坏,重新安装核心Jupyter组件:

    pip uninstall -y ipykernel ipython jupyter_client jupyter_core
    pip install ipykernel ipython jupyter_client jupyter_core
    
  • 规范标准流操作方式
    若需临时重定向输出,使用上下文管理器确保标准流能恢复:

    import sys
    from io import StringIO
    
    old_stderr = sys.stderr
    sys.stderr = StringIO()
    try:
        # 执行目标代码
        pass
    finally:
        sys.stderr = old_stderr
    

内容的提问来源于stack exchange,提问作者burcak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:37:43