Trying to set ipdb.set_trace(): RuntimeError: There is no current event loop in thread 'Thread-....'

Trying to set ipdb.set_trace(): RuntimeError: There is no current event loop in thread 'Thread-....'

我在 Windows 7 上使用 Miniconda 3,尝试使用 ipdb 在我的程序中启动调试过程。当然,我已经安装了 IPython 和 ipdb(在 virtualenv 中)。

测试程序:

#!/usr/bin/env python

import ipdb

def a():
    for i in range(10):
        print(i)
    ipdb.set_trace()
    print(100)

a()

我得到的是 Python 开始进入无限循环,一遍又一遍地喷出这样的异常:

Exception in thread Thread-3398:
Traceback (most recent call last):
  File "C:\ACME\Dev\Miniconda3\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\ACME\Dev\Miniconda3\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\ACME\Dev\projects\example\venv\lib\site-packages\IPython\terminal\debugger.py", line 102, in in_thread
    line = self.pt_app.prompt()
  File "C:\ACME\Dev\projects\example\venv\lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 992, in prompt
    return get_event_loop().run_until_complete(self._dumb_prompt(self.message))
  File "C:\ACME\Dev\Miniconda3\lib\asyncio\events.py", line 644, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-3398'.

这可能是什么原因以及如何解决?

版本:

Python 3.7.6

ipdb==0.13.3
ipykernel==5.3.0
ipython==7.15.0
ipython-genutils==0.2.0
ipywidgets==7.5.1

(我列出了我发现的与 IPython 相关的所有软件包,如果重要的话我还安装了 Jupyter)。

您使用 Emacs 吗? 我在 Emacs 上遇到了和你一样的问题 但是,我 运行 在终端上进行 pytest,一切正常。

我用新代码片段替换了旧样式

import ipdb;
ipdb.set_trace() 

例如:

from IPython.core import debugger
debug = debugger.Pdb().set_trace

def buggy_method():
    debug()

我解决了这个问题。 请参阅 https://github.com/ipython/ipython/pull/9731/

上的参考资料