【问题标题】:Exit pdb Interactive Mode from Jupyter Notebook从 Jupyter Notebook 退出 pdb 交互模式
【发布时间】:2018-05-11 08:43:39
【问题描述】:

pdb内,我使用interact命令进入交互模式(documentation)。

这给了我一个 pdb 内的 InteractiveConsole(我需要它来进行列表理解)。

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

这个question 是完全相同的问题,但解决方案只能在终端上工作。

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

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

【问题讨论】:

  • 我在 Python 问题跟踪器上提交了一个错误,要求添加退出 PDB InteractiveConsole 的命令:bugs.python.org/issue41096

标签: python debugging jupyter-notebook


【解决方案1】:

一种独立于平台的方法(不需要终端或 Emac)来解决这个问题是使用pandas

  • 在交互式控制台中运行它:

    from pandas.io.clipboard import copy; copy("\x04")

  • 然后ctrl+v(粘贴“传输结束字符”)和回车

【讨论】:

    【解决方案2】:

    这是一个类似于 triccare 的解决方案,不需要 Emacs。

    在 Linux 上运行此命令:

    echo '\x04' | xclip -selection clipboard
    

    或者 macOS 上的这个命令:

    echo '\x04' | pbcopy
    

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

    这是如何工作的:这会将 ASCII 字符 0x04,“END OF TRANSMISSION”,放到您的剪贴板上。该字符是一个“控制字符”,表示没有更多输入,这会导致 PDB 交互会话结束。

    【讨论】:

      【解决方案3】:

      我成功的唯一方法是从另一个来源复制/粘贴 Crtl-D 字符。我使用 Emacs,所以这相当容易,但是任何允许您将 Crtl-D 插入文档的文本编辑器都应该可以工作。插入后,使用标准复制/粘贴到 pdb 交互字段并点击 or 。这应该能让你离开。

      对于 Emacs,长路如下,用于演示目的:

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

      此时您应该在缓冲区中看到 ^D。此时选择角色和 M-w 或 kill-ring-save 将其放在剪贴板上。

      然后,切换到浏览器并激活交互字段,然后将字符粘贴回去。你不会看到任何东西。然后打。这应该/可能会让你出局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多