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

Python递归程序返回None问题求助:预期结果为'hello!'

问题排查:递归函数返回None的原因及修复

嘿,我一眼就看到问题所在啦——你的递归函数在深层调用时没有返回结果,导致最外层调用最终拿到的是默认的None,而不是你想要的"hello!"。

问题分析

看你代码里的递归分支:

a(".".join(key[1: len(key)]), dict_data[key[0]])

当字段路径拆分后长度大于1时,你确实发起了递归调用,去访问嵌套字典的下一层,但你没有把这个递归调用的结果返回给上一层函数。递归的每一层都需要把结果传递回去,否则最外层的函数调用会因为没有明确的return语句,默认返回None。

修复后的代码

只需要给递归调用加上return关键字就行:

def a(field, dict_data):
    key = field.split('.')
    if len(key) == 1:
        return dict_data[key[0]]
    # 这里加上return,把递归结果传递回去
    return a(".".join(key[1: len(key)]), dict_data[key[0]])

if __name__ == "__main__":
    d = dict({'a': dict({'b': dict({'c': dict({'d': "hello!"})})})})
    print(a("a.b.c.d", d))  # 现在会输出:hello!

额外优化小建议

其实key[1: len(key)]可以简化成key[1:],Python里切片的结束索引如果是列表长度的话可以省略,代码会更简洁:

return a(".".join(key[1:]), dict_data[key[0]])

这样修改后,你的递归函数就能正确逐层传递结果,最终返回嵌套字典里的"hello!"啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:27:47