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

如何在Jupyter Notebook中定位警告发生的准确代码位置?

定位Jupyter Notebook中跨Notebook引用的警告来源
  • 启用完整警告调用栈
    默认警告仅显示临时转换文件的行号,因为Jupyter会把导入的Notebook转成临时.py文件执行。在主Notebook开头添加以下代码,强制输出完整调用栈,包含主Notebook的触发单元格和被引用模块的具体方法:

    import warnings
    import traceback
    import sys
    
    # 强制显示所有警告的完整追踪信息
    warnings.filterwarnings("always")
    # 增加追踪栈显示深度,确保能看到跨Notebook的调用链
    sys.tracebacklimit = 10
    

    重新运行代码后,警告会输出完整的调用路径,能直接定位到被引用Notebook中的具体方法。

  • 查看临时转换文件的对应代码
    警告中的临时文件路径C:\Users\<MYUSER>\AppData\Local\Temp\ipykernel_4204\2031882426.py是被引用Notebook转换后的文件。在主Notebook中执行以下代码,查看第35行前后的内容:

    import os
    
    temp_file = r"C:\Users\<MYUSER>\AppData\Local\Temp\ipykernel_4204\2031882426.py"
    if os.path.exists(temp_file):
        with open(temp_file, encoding="utf-8") as f:
            lines = f.readlines()
            # 打印第35行前后5行的代码
            start = max(0, 35-5)
            end = min(len(lines), 35+5)
            print("".join(lines[start:end]))
    

    转换后的文件会保留原Notebook的单元格标记(比如# In[1]),通过代码片段和标记就能对应到原Notebook的具体单元格。

  • 修改Notebook导入方式以保留调试信息
    如果你用nbimporter等工具导入Notebook,改用调试模式加载,让警告直接关联原Notebook的单元格:

    from nbimporter import NotebookLoader
    
    # 启用调试模式加载Notebook
    loader = NotebookLoader(debug=True)
    # 替换为你的被引用Notebook文件名(不带.ipynb后缀)
    target_module = loader.load_module("your_notebook_name")
    

    调试模式下,警告会直接显示原Notebook的单元格编号和代码行,无需查看临时文件。

  • 在被引用Notebook中添加临时调试标记
    若以上方法仍无法定位,可在被引用Notebook的所有方法中添加临时打印,追踪执行路径:

    import inspect
    
    def your_method():
        # 打印当前执行的方法名
        print(f"正在执行方法:{inspect.currentframe().f_code.co_name}")
        # 原方法代码...
    

    运行主Notebook时,通过打印信息就能找到触发警告的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:14