递归函数返回None

时间:2020-11-06 14:41:38

标签: python recursion

我正在使用递归函数来获取每个目录中的文件大小,但是却遇到TypeError:+ =不支持的操作数类型:'int'和'NoneType'。但是我检查了所有子目录下的所有文件,没有看到任何文件返回None类型:

import os
def disk_usage(path):
    """
    this function resursiverly check file size in each diretory and return size of 
    path/directory
    provided.
    """
    total = os.path.getsize(path)
    if os.path.isdir(path):
        for file in os.listdir(path):
            subdir = os.path.join(path, file)
            print(subdir)
            total +=disk_usage(subdir)
    print ("{} for path {}".format(total, path))
path = "/home/akjha/Documents/Aashutosh_cfengine/"
disk_usage(path)

2 个答案:

答案 0 :(得分:3)

disk_usage的末尾,您需要添加

return total

否则,如果没有return语句,它将隐式return None导致

total += disk_usage(subdir)

int添加到None

答案 1 :(得分:2)

您的方法disk_usage()不会返回任何东西。在python中,默认情况下不会显式返回内容的方法将返回None

递归调用时

total +=disk_usage(subdir)

disk_usage(subdir)返回None,这会产生您的错误。

解决方案:放置

return total

在函数末尾,然后缩进。