Мне действительно нравится pudb и в сочетании с I Python Я успешно отлаживаю python код уже много лет.
Большинство из время, когда эта комбинация просто работает, например,
# test1.py
import time
def do_something():
import pudb
pudb.set_trace()
sleep(1)
return 1
do_something()
Если вы выполните python test1.py
, запускается pudb, а когда вы нажимаете !
, интерактивная оболочка I Python запускается без проблем.
Однако если вы установите трассировку внутри подпрограммы, pudb запускается без проблем, вы даже можете без проблем войти в await some_async_call()
вызов. Но если вы хотите запустить интерактивную оболочку и нажать !
, то весь сеанс прерывается с ошибкой. Пример Fox:
# test2.py
import asyncio
async def do_something():
import pudb
pudb.set_trace()
await asyncio.sleep(1)
return 1
asyncio.run(do_something())
$ python test2.py
pudb starts and halts before await asyncio.sleep(1), now press !
Hit Ctrl-D to return to PuDB.
In [1]:
Traceback (most recent call last):
File "test2.py", line 11, in <module>
asyncio.run(do_something())
File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/base_events.py", line 599, in run_until_complete
self.run_forever()
File "test2.py", line 7, in do_something
await asyncio.sleep(1)
File "test2.py", line 7, in do_something
await asyncio.sleep(1)
...
File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/base_events.py", line 554, in run_forever
raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<Renderer.wait_for_cpr_responses.<locals>.wait_for_timeout() running at /home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/site-packages/prompt_toolkit/renderer.py:505> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fe05cd42fd0>()]>>
Я подозреваю, что это проблема I Python, потому что если я изменю оболочку с I Python на b python и нажмите !
, после чего интерактивная оболочка b python запустится без проблем. Я искал решение этой проблемы, но мне кажется, что я не могу найти ничего, что могло бы помочь, мне удалось найти эти проблемы / запрос на получение запросов на github # 12028 , # 12140 и # 12141 , что, похоже, связано с этим, но я не знаю, так ли это и были ли они выпущены.
Так что мой вопрос Кто-нибудь может воспроизвести эту ошибку? Это ошибка pudb или ipython?
Я использую python 3.8.1, установленный из anaconda 4.8.3 (linux 64bit) и IPython 7.13.0 (установленный с conda install ipython -c conda-forge
, но такой же применяется при установке через pip
).