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

Jupyter Notebook中使用%debug无法访问缺失回溯帧的解决方法

解决Jupyter %debug无法访问自定义代码栈帧的问题

遇到这种情况很常见——默认进入调试器时你停在了第三方库抛出异常的帧,而自己的代码在调用栈的更底层。这里有几个简单的方法让你快速定位到自己的代码:

1. 先查看完整调用栈

在调试器的ipdb>提示符下输入bt(或者where)命令,这会列出所有层级的栈帧,包括你自己的代码。比如在你的案例中,输出会包含:

...
<ipython-input-51-c479a5eeae49> in plotSensitivity(dataset, threshold)
     75         truePositives * 100,
     76         label=method,
---> 77         ls=LS[method[0]])
...

2. 直接跳转到你的代码帧

从bt的输出里找到你自定义函数(比如plotSensitivity)对应的帧编号(通常是一个数字,比如假设是6),然后输入:

frame 6

这样就直接切换到你的代码执行的栈帧了,现在你可以查看局部变量,比如输入print truePositives.shape或者locals()来检查x和y维度不匹配的原因。

3. 理解up/down的方向

你之前一直用up是往调用栈的上层(调用当前函数的帧)走,但默认停在的异常帧是调用栈的最顶端(最新的调用),你的代码在最底层(最早的调用)。如果不想用frame跳转,你可以一直用up直到看到自己的代码——但有时候调试器会因为IPython输入帧的特殊标记,提前提示"Oldest frame",这时候bt是更可靠的方式。

额外调试技巧

  • 可以提前设置%pdb on,这样代码抛出异常时会自动进入调试器,不用手动输入%debug
  • 在目标栈帧中,用p <变量名>快速打印变量值,比如p truePositives.shape
  • 用list命令查看当前帧附近的代码,确认哪一行出了问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:21