Python:最大递归深度
下面是一个函数,它的作用是返回传入参数的大小总和。这些参数可以是单个文件、文件夹,或者是文件和文件夹的列表。不过,当我尝试测试这个代码时,它出现了一个错误信息:RuntimeError: maximum recursion depth exceeded while calling a Python object
。
我该怎么解决这个问题呢?
谢谢
suresh
#!/usr/bin/python3.1
import os
def fileSizes(f):
if hasattr(f,'__iter__'):
return sum(filter(fileSizes,f))
if os.path.isfile(f):
return os.path.getsize(f)
elif os.path.isdir(f):
total_size = os.path.getsize(f)
for item in os.listdir(f):
total_size += fileSizes(os.path.join(f, item))
return total_size
4 个回答
3
我上次查看时,默认的最大递归深度是1000。你有几个选择:
- 使用Stackless Python,它没有递归限制(可以无限递归)。
- 把你的函数改写成迭代的方式,而不是递归,这样就不会一开始就溢出栈。
- 通过
sys.setrecursionlimit
来设置最大递归限制。不过要小心,如果设置不当可能会导致程序崩溃。
9
与其自己写一个临时的目录遍历方法,不如使用内置的 os.walk
方法,具体可以查看 文档。
实际上,文档中的例子(上面的链接)可以计算出非目录文件的总大小。
1
问题出在这一行:
if hasattr(f,'__iter__'):
return sum(filter(fileSizes,f))
因为 f
是一个路径,它其实是一个字符串,并且它有一个叫 __iter__
的属性,所以你在这里会无限循环。