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

Bottle框架出现Maximum Recursion Depth Exceeded错误求调试建议

解决Maximum Recursion Depth Exceeded错误的调试建议

嘿,我一眼就揪出问题所在了——你遇到的递归超限错误完全是函数命名冲突导致的无限递归!

问题根源分析

你定义了两个同名的Subjects函数:

  1. 第一个是负责查询数据库、返回科目数据的工具函数
  2. 第二个是Flask的路由处理函数,用来响应/subjects请求

当用户访问/subjects时,路由函数Subjects()内部调用了Subjects()——这时候Python会认为你在调用当前的路由函数本身,而不是第一个数据查询函数。于是就陷入了“路由函数调用自己→再调用自己→再调用自己……”的无限循环,直到触发Python的递归深度上限。你调高递归限制后出现段错误,是因为栈内存被耗尽了,这是硬件层面的限制,根本解决不了逻辑问题。

修复方案:给函数重命名,区分功能

只需要把两个函数的名字区分开,就能彻底解决问题。建议遵循PEP8规范,用小写字母加下划线命名函数,让代码更易读:

def runSQL(sql):
    db = sqlite3.connect('zadanie.db')
    c = db.cursor()
    c.execute(sql)
    data = c.fetchall()
    db.commit()
    c.close()
    return data

# 重命名数据查询函数,明确它的功能
def get_subjects():
    sql = "SELECT (here is my query)"
    data = runSQL(sql)
    return data

@app.route('/subjects')
def subjects():
    # 调用重命名后的查询函数,避免混淆
    sub = template('look4.html', rows=get_subjects())
    return sub

额外调试建议

  • 遇到递归错误时,先检查函数调用链:看看是不是有函数直接/间接调用了自己
  • 永远不要随意调高递归限制:Python的递归设计本来就不适合处理无限循环场景,调高限制只会掩盖逻辑错误,最终导致栈溢出
  • 调试时可以加打印语句:比如在每个函数开头加print("我是数据查询函数")或print("我是路由函数"),快速定位当前调用的是哪个函数
  • 养成良好的命名习惯:用有意义的名字区分不同功能的函数,避免重名混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:42:11