Spyder调试器触发RecursionError:非递归代码为何递归超限?
根据你描述的情况,这个递归错误完全是Spyder调试组件的版本兼容问题导致的——和你的代码本身无关,哪怕是最简单的脚本也会触发,说明问题出在调试器的初始化逻辑上。
从回溯信息能看到,IPython的调试器在继承标准pdb类时陷入了循环调用,这种情况在Python 3.6环境里比较常见:一方面Python 3.6已经停止维护,后续更新的Spyder、IPython版本对它的支持逐渐弱化;另一方面,你的环境里可能某次自动更新了IPython或Spyder,打破了原本适配的版本平衡,而你同事的Python 3.7环境组件版本匹配度更好,所以没出现这个问题。
下面是几个能解决问题的具体步骤:
回退IPython到兼容版本
Python 3.6对新版本IPython的支持有限,你可以卸载当前IPython,安装一个经过验证的兼容版本:pip uninstall ipython -y pip install ipython==7.16.1这个版本是Python 3.6能稳定支持的较新IPython版本,很多用户反馈它能解决这类调试器递归冲突问题。
重置Spyder调试器配置
有时候Spyder的本地配置文件损坏也会导致奇怪的调试异常。你可以:- 打开Spyder,点击顶部菜单栏的
工具->偏好设置 - 切换到
Python解释器,确认当前使用的是你那个Python36Main环境 - 再切换到
调试器选项卡,点击重置为默认设置 - 重启Spyder后尝试调试简单脚本
- 打开Spyder,点击顶部菜单栏的
重装适配Python3.6的Spyder版本
如果上面的方法没用,考虑卸载当前Spyder,安装最后一个官方支持Python3.6的Spyder版本:pip uninstall spyder -y pip install spyder==4.2.5清理环境冗余依赖
用pip list命令查看你的Python36Main环境里的包,检查是否存在多个版本的pdb、ipython-core或Spyder相关组件,如果有,卸载掉多余的版本,只保留适配的那一套。
另外,既然你之前能正常使用,大概率是某次包更新触发了这个问题,回退到适配的版本是最直接的解决方案。如果条件允许,建议你升级Python版本到3.7及以上,这样后续工具的兼容性会好很多,也能避免类似的旧版本适配问题。
内容的提问来源于stack exchange,提问作者FenryrMKIII

