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

Python递归函数打印值正确但最终返回None的原因排查

问题根因

两个问题共同导致返回值始终为None,核心原因是递归返回值未向上传递:

  • 递归逻辑的else分支中,调用深层detectNumber时没有加return关键字:当最深层递归命中空格判断、返回正确的拼接数字串时,这个值仅返回到上一层递归的调用位置,上一层递归没有将该值继续向更外层传递,函数执行完递归调用语句后就直接结束,Python中无显式return的函数默认返回None,逐层传递到最外层调用处拿到的就是None。
  • 原代码使用无指定异常类型的裸except,如果遍历到字符串末尾触发索引越界,会直接进入异常分支打印日志,没有返回任何值,同样会得到None结果。
修复方案
  1. 在else分支的递归调用前添加return,保证深层返回的结果可以逐层传递到最外层
  2. 将裸except改为捕获具体的IndexError(对应遍历到字符串末尾的场景),异常分支同样返回当前拼接完成的数字串,兼容入参末尾无空格的场景

修复后的完整代码:

def detectNumber(stringVal, lp, makeNumber=""):
    try:
        if stringVal[lp] == " ":
            print("Space detected")
            print(f"At start makeNumber was {makeNumber}")
            return makeNumber
        else:
            makeNumber += stringVal[lp]
            lp += 1
            # 逐层返回递归调用的结果
            return detectNumber(stringVal, lp, makeNumber=makeNumber)
    except IndexError:
        print(f"Reach end of string at position {lp}")
        return makeNumber
调用验证

执行示例调用代码:

res = detectNumber("12456  18", 0)
print(f"Final result: {res}")

输出结果符合预期:

Space detected
At start makeNumber was 12456
Final result: 12456

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:48:48