从Jupyter Notebook退出pdb交互模式

20

pdb 中,我使用 interact 命令进入交互模式 (文档)。

这使我得到了 pdb 内的 InteractiveConsole(我需要用它来进行列表推导)。

在 Jupyter Notebook 中,如何退出交互模式而不完全退出调试器?

这个问题与我的问题完全相同,但是其中的解决方法只适用于终端。

  • 在 Jupyter 中按下 ctrl+d 只会添加一个书签。
  • quit() 会返回 NameError: name 'quit' is not defined

我可以执行 import sys; sys.exit(),但是那会完全退出调试器,意味着我必须从头开始。


2
我在Python问题跟踪器上提交了一个错误报告,要求添加一个命令来退出PDB InteractiveConsole:https://bugs.python.org/issue41096 - Kerrick Staley
3个回答

7

这里有一个与triccare类似的解决方案,不需要使用Emacs。

在Linux上运行以下命令:

echo '\x04' | xclip -selection clipboard

在 macOS 上,请使用以下命令:
echo '\x04' | pbcopy

然后将其粘贴到Jupyter中的PDB交互式提示符中,并按回车键。

原理:这会将ASCII字符0x04,“传输结束”放入您的剪贴板中。这个字符是一个“控制字符”,表示没有更多的输入,从而导致PDB交互式会话结束。


7

一个跨平台的解决方法是使用pandas(不需要终端或Emac):

  • Run this in the interactive console itself:
    from pandas.io.clipboard import copy; copy("\x04")
    
  • And then do ctrl+v to paste the 'end of transmittion charecter' and hit Enter.

1
唯一成功的方法是从其他来源复制/粘贴Crtl-D字符。我使用Emacs,所以这很容易,但任何允许您将Crtl-D插入文档的文本编辑器都应该可以工作。插入后,使用标准的复制/粘贴到pdb交互字段,并按 或 。这应该让您退出。
对于Emacs,演示目的的长方法如下:

M-x insert char <RET> END OF TRANSMISSION <RET>

此时您应该在缓冲区中看到^D。然后选择该字符并使用M-w或kill-ring-save将其放入剪贴板。

接下来,切换到浏览器并使交互字段处于活动状态,然后将字符粘贴回去。您将看不到任何内容。然后按“.”这应该/可能会让您退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接