ipdb 在回车后停止显示提示文本

mar*_*jop 14 python pdb ipdb

最近,当使用设置断点时ipdb.set_trace(context=20),我可以看到我第一次输入的命令,按回车键后,下次我在 ipdb 提示符中写入指令或命令时不会显示。当我按回车键时,它会执行它并在前面的行中显示它。

直到最近才发生这种情况。我使用的是 mac,带有 iterm、最新的 ipdb 和 pytest。

编辑 2022-3-29

  • 我一直在尝试使用 shell 设置,断开 ozsh、抗原插件,看看它是否相关,但似乎没有影响。

  • 我也尝试过使用终端,而不是 iterm。

  • 以下是我所描述内容的录音: 在此输入图像描述

编辑 2022-3-31

  • 我意识到这种情况只发生在我的一个项目中
  • 无论哪种类型,出现异常后提示都会消失,否则一直正常。
  • 异常提示开始失败后,但有时不在第一个命令中
  • 我写了一个简单的 python 程序来使用相同的设置运行,但它没有发生,所以还有其他的事情搞乱了这个

编辑 2022-3-31 (2.0)

  • 花了一些时间玩这个之后,我发现这只发生在一些测试中,那些用 freezegun 装饰的测试

我正在使用 freezegun 1.2.1 和 pytest 6.2.5。当我运行此代码时,如果我执行 print 几次,光标就会消失。这是我能想到的最基本的复制测试。

导入ipdb
从 freezegun 导入 freeze_time
    
    
@freeze_time(“2022年3月12日”)
def test_prompt_ipdb():
    ipdb.set_trace()
    
test_prompt_ipdb()

我现在相信这是这两个之一的错误,很可能是 freezegun 做了一些奇特的事情。

mic*_*ses 7

这看起来不像 ipdb 中的错误(也不是 IPython 中的错误,它也会重现)。问题出在 freezegun 和Prompt-toolkit之间,IPython(以及 ipdb)依赖它们。我希望他们会接受这个 PRprompt_toolkit ,但在此之前,可以通过使用参数添加到忽略列表来解决此行为extend_ignore_list,如下所示:

import ipdb
import freezegun

freezegun.configure(extend_ignore_list=['prompt_toolkit'])

@freezegun.freeze_time("2022-3-12")
def test_prompt_ipdb():
    ipdb.set_trace()

test_prompt_ipdb()
Run Code Online (Sandbox Code Playgroud)