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
相关产品推荐
相关产品推荐

