如何修复先启动IPython再移动Anaconda Prompt触发的事件循环异常?
IPython窗口调整触发"Unhandled exception in event loop"异常的处理
问题场景
- 正常流程:先通过Win键+右键将Anaconda Prompt窗口移至屏幕右半部分,再启动IPython,运行无异常
- 异常流程:先启动IPython,再调整Anaconda Prompt窗口到右半部分,立刻触发
Unhandled exception in event loop异常,核心错误为prompt_toolkit/layout/screen.py中assert width >=0断言失败
异常堆栈信息
Unhandled exception in event loop: File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 1026, in in_term await _do_wait_for_enter("Press ENTER to continue...") File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 1545, in _do_wait_for_enter await session.app.run_async() File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 886, in run_async return await _run_async(f) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 739, in _run_async self._redraw() File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 543, in _redraw self.context.copy().run(run_in_context) File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\application\application.py", line 526, in run_in_context self.renderer.render(self, self.layout) File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\renderer.py", line 678, in render WritePosition(xpos=0, ypos=0, width=size.columns, height=height), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\anaconda3\Lib\site-packages\prompt_toolkit\layout\screen.py", line 314, in __init__ assert width >= 0
处理方案
- 临时规避:维持先调整窗口位置再启动IPython的操作顺序,避开尺寸计算bug
- 彻底修复:更新prompt_toolkit到最新版本,新版本已修复窗口尺寸变化时的边界计算问题
- 在Anaconda Prompt中执行命令:
conda update prompt_toolkit
- 在Anaconda Prompt中执行命令:
- 应急处理:异常触发后,按回车即可退出异常提示,恢复IPython会话使用
内容的提问来源于stack exchange,提问作者Stats Cruncher
相关产品推荐
相关产品推荐

