在Jupyter Notebook中使用调试器时,我一直遇到问题,特别是以下命令:
from IPython.core.debugger import Tracer
Tracer()() #this one triggers the debugger
Run Code Online (Sandbox Code Playgroud)
每当我使用Tracer()()时,内联调试器就会按预期显示,但是一旦在字段中输入任何命令:n(ext),s(tep)等,我就会跳到该行:
finally:
# Reset our crash handler in place
sys.excepthook = old_excepthook
Run Code Online (Sandbox Code Playgroud)
这是问题和尝试调试的代码的图像(确切的代码无关,因为我能够在其他笔记本上重现该问题)。
我正在Mac上运行OSX El Capitan,并使用Anaconda for python 2.7。这是有关通过运行获得的当前设置的一些详细信息:
conda info --all (from root env)
Run Code Online (Sandbox Code Playgroud)
注意,我尝试了几种不同的调试选项:pdb,ipdb和Tracer(),但是每个选项都遇到了单独的问题。根据Stackoverflow问题(使用ipdb调试Jupyter中的Python代码),此时 Tracer()似乎是标准选项。
此外,我已经能够在运行Windows 7的Dell计算机上复制此问题。
任何帮助将不胜感激!
在空白的 Jupyter 笔记本中,我在单元格中输入以下代码:
from IPython.core.debugger import set_trace
set_trace()
print("hello")
Run Code Online (Sandbox Code Playgroud)
运行单元后,我进入调试模式(第一个屏幕截图)。我想跳到下一行,因此我使用命令 n(ext),就像在 pdb 中一样。但随后我并没有像我预期的那样执行打印命令,而是执行一些内部 IPython 代码(第二个屏幕截图)。如何转到单元格代码中的下一行?
编辑:根据一个答案的建议,我用 替换set_trace(),breakpoint()但结果仍然相同。