You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归错误后重置代码未执行,求排查问题原因

问题排查方案
  • 先确认是否进入触发分支
    在small_ship的except RecursionError块里加print("递归错误触发,返回1"),在build_ships的if分支开头加print("进入board重置流程")。运行后看控制台有没有这些输出,如果没有,说明small_ship根本没返回1,排查方向转向:

    • 检查code_1的递归逻辑,是否真的会触发RecursionError?比如递归终止条件是不是没写对,导致递归深度没达到Python的默认限制(默认是1000)。
    • 检查code_1是否抛出了其他异常,比如IndexError、KeyError等,这些异常不会被except RecursionError捕获,函数会直接崩溃,不会返回1。可以把except RecursionError改成except Exception as e,打印异常信息print(f"捕获到异常:{e}"),确认到底出了什么错。
  • 检查board重置代码的有效性
    如果已经确认进入了if分支,但重置后没效果,大概率是全局变量的问题:

    • 如果board是全局变量,在build_ships函数里直接写board = []会创建一个局部变量,不会修改全局的board。需要在函数开头加上global board声明,比如:
      def build_ships():
          global board
          if small_ship(board) == 1:
              board = []  # 现在修改的是全局board
              build_ships()
              return 0
      
    • 如果board是通过参数传递的引用类型,重置时要确保是修改原对象,而不是重新赋值。比如如果board是列表,用board.clear()再重新填充默认值,而不是直接赋值新的列表。
  • 检查递归调用的栈溢出风险
    如果每次触发递归错误就重新调用build_ships(),可能会陷入无限递归循环,最终导致整个程序崩溃(表现为无响应)。可以在重置board后,添加递归深度限制,或者改用循环代替递归调用,比如:

    def build_ships():
        global board
        while True:
            if small_ship(board) == 1:
                board = []  # 重置board
            else:
                break  # 成功构建,退出循环
    

内容的提问来源于stack exchange,提问作者Sarijen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:20:28