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

如何通过nbconvert CLI执行ipynb至首个错误并保存结果文件?

问题:通过CLI实现Jupyter Notebook遇首个错误即停止并保存执行结果?

我希望通过CLI运行ipynb文件,满足以下要求:

  • 遇到第一个错误时立即停止执行
  • 保存生成的文件,该文件需包含出错前所有单元格的输出以及错误信息

但现有的jupyter nbconvert --execute [myfile.ipynb]无法满足需求:出错时不会生成任何文件;添加--allow-errors参数也不行,因为它会继续执行后续单元格,不会在首个错误后停止。

官方文档提供了代码实现逻辑:

笔记本执行过程中出现错误时,默认会停止执行并抛出CellExecutionError,同时会打印导致错误的源单元格及原始错误名称和信息。出错后仍可按如下方式保存笔记本:

with open('executed_notebook.ipynb', mode='w', encoding='utf-8') as f:
   nbformat.write(nb, f)

请问是否可以通过CLI实现该功能?


解决方案

原生jupyter nbconvert没有直接的CLI参数能同时满足「遇首个错误停止」+「保存执行结果(含错误)」的需求,但可以通过编写自定义脚本并封装为CLI工具的方式实现:

1. 编写自定义Python脚本

创建一个名为run_nb_until_error.py的脚本,内容如下:

#!/usr/bin/env python3
import argparse
import nbformat
from nbconvert.preprocessors import ExecutePreprocessor, CellExecutionError

def run_notebook(input_path, output_path):
    # 读取目标笔记本文件
    with open(input_path, 'r', encoding='utf-8') as f:
        nb = nbformat.read(f, as_version=4)
    
    # 配置执行器:超时时间300秒,使用Python3内核
    ep = ExecutePreprocessor(timeout=300, kernel_name='python3')
    
    try:
        ep.preprocess(nb, {'metadata': {'path': '.'}})
    except CellExecutionError:
        # 捕获到第一个错误时停止执行,不抛出异常
        pass
    finally:
        # 无论是否出错,都保存执行后的笔记本(含之前的输出和错误信息)
        with open(output_path, 'w', encoding='utf-8') as f:
            nbformat.write(nb, f)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run Jupyter notebook until first error and save the result.')
    parser.add_argument('input', help='Path to your input .ipynb file')
    parser.add_argument('-o', '--output', default='executed_notebook.ipynb', help='Path to save the executed notebook (default: executed_notebook.ipynb)')
    args = parser.parse_args()
    
    run_notebook(args.input, args.output)

2. 作为CLI工具运行

  • 在Unix/Linux/macOS系统中,赋予脚本执行权限:

    chmod +x run_nb_until_error.py
    

    之后直接通过CLI调用:

    ./run_notebook_until_error.py your_notebook.ipynb -o result.ipynb
    
  • 在Windows系统中,直接通过Python调用:

    python run_notebook_until_error.py your_notebook.ipynb -o result.ipynb
    

该脚本会在遇到第一个错误时立即停止执行,并将包含出错前所有输出及错误信息的笔记本保存到指定路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:11:07