Spyder IDE调试未完成输入退出触发BdbQuit报错卡死问题求助
问题复现背景
本次反馈针对Spyder IDE调试过程中退出触发的卡死问题,复现用测试代码如下:
def q(s=""): if s==0: inp=input("enter something to abrupt") if inp!="": 1/0 if s==1: 1/0 while 1: q(s=0) q(1)#debug pointer was here
复现路径:调试代码时,程序执行到input()环节等待用户输入,此时不输入任何内容直接退出调试,就会触发如下报错:
Program interrupted. (Use 'cont' to resume). --Return-- !exit [SpyderKernelApp] WARNING | Invalid Message: Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 896, in _input_request [self.stdin_socket], [], [self.stdin_socket], 0.01 File "C:\ProgramData\Anaconda3\lib\site-packages\zmq\sugar\poll.py", line 147, in select return_sockets = zmq_poll(sockets, timeout) File "zmq/backend/cython/_poll.pyx", line 143, in zmq.backend.cython._poll.zmq_poll File "zmq/backend/cython/_poll.pyx", line 123, in zmq.backend.cython._poll.zmq_poll File "zmq/backend/cython/checkrc.pxd", line 13, in zmq.backend.cython.checkrc._check_rc File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spyderpdb.py", line 216, in sigint_handler self.set_trace(sys._getframe()) File "C:\ProgramData\Anaconda3\lib\bdb.py", line 92, in trace_dispatch return self.dispatch_return(frame, arg) File "C:\ProgramData\Anaconda3\lib\bdb.py", line 154, in dispatch_return if self.quitting: raise BdbQuit bdb.BdbQuit
报错后Spyder会卡在调试模式无法正常操作,只能强制关闭整个程序。
解决方案
- 临时操作规避:调试过程中如果遇到需要
input()输入的断点场景,不要直接终止调试,先在调试控制台输入任意字符后回车,再执行退出调试的操作,就不会触发该异常 - 卡死后快速恢复:如果已经触发报错卡死,不需要直接关闭整个Spyder程序,点击编辑器顶部菜单栏的「重启内核」选项,等待内核重置完成即可恢复正常操作,当前编辑的所有代码文件内容不会丢失
- 永久修复:将Spyder版本升级到5.3.3及以上,同步升级spyder-kernels组件到对应版本,该版本官方已经修复了调试状态下中断stdin输入请求的异常捕获逻辑,可彻底解决该问题
内容的提问来源于stack exchange,提问作者Farhang Amaji
相关产品推荐
相关产品推荐

