如何在 VS Code 中调试导入的 Jupyter Notebook?

Sim*_*ead 5 python ipython visual-studio-code

使用Visual Studio CodePython 扩展,您可以使用#%%以下命令在 Python 代码中定义代码单元:

#%%
a = 1
breakpoint()
b = 2
Run Code Online (Sandbox Code Playgroud)

然后您可以单击“运行单元”,VS Code 将打开一个 Python 交互窗口并运行当前单元。不幸的是,如果您运行上面的单元格,它将因breakpoint()线路而失败。错误是:

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.
Run Code Online (Sandbox Code Playgroud)

如果您注释掉断点,它会运行但不会在断点处停止:

#%%
a = 1
#breakpoint()
b = 2
Run Code Online (Sandbox Code Playgroud)

如果您删除特殊的“运行单元格”注释,它将在断点处停止,但随后您将丢失 Python Interactive:

a = 1
breakpoint()
b = 2
Run Code Online (Sandbox Code Playgroud)

您可以(有点)通过单击 Visual Studio Code 中的装订线来添加断点来替换断点,从而获得两全其美的效果:

显示断点

但是,我更愿意在代码中编写断点。关于支持这个案例的任何想法?

小智 1

我刚刚发现这个被低估的库xdbg。我在 Python 3.7 上运行时遇到了一些烦人的异常,但它在 VS Code 的交互模式下运行良好。

我认为xdbg除了使用VS Code 中的经典 Python 调试器运行导入的 Notebook 之外,这是一个有趣的替代方案。请注意,当您在交互模式下工作时,您基本上是在构建 Python 脚本,因此您可以非常简单地使用调试器。唯一的缺点是,每次运行调试器时,脚本都会从头开始(如果您启动脚本加载大量数据,这可能会很烦人)。

我希望 VS Code 中的交互式 Python 控制台具有调试选项,但他们似乎还不支持它。

希望这可以帮助。