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
相关产品推荐
相关产品推荐

