递归构造函数,变量共享

时间:2013-09-13 10:18:06

标签: python

尝试遍历目录和子目录我在以下代码中遇到错误。 在这里,我试图以递归方式调用构造函数。

import os
from os.path import isfile, join

class CovPopulate:
    fileList = list()
    def __init__(self,path):
        self.path = path
        for f in os.listdir(self.path):
            if isfile(join(self.path,f)):
                if f.endswith(".txt"):
                    fileList.append(join(self.path,f))
            else:
                CovPopulate(f)

追溯: -

 CovPopulate(r"C:\temp")
File "<pyshell#1>", line 1, in <module>
CovPopulate(r"C:\temp")


 File "C:/fuzzingresults/CovPopulate.py", line 11, in __init__
      fileList.append(join(self.path,f))
       NameError: global name 'fileList' is not defined

但是,我已经定义了fileList = list()

这次我检查了同步错误:/

1 个答案:

答案 0 :(得分:0)

filelistCovPopulate类的命名空间中定义。我建议通过self访问它。此外,当f不是文件或目录(符号链接,管道......)时,我遇到了问题,所以我添加了isdir检查。最后,只有将绝对路径传递给CovPopulate时,才能使代码生效。我的__init__函数如下所示:

def __init__(self,path):
    self.path = path
    for f in os.listdir(self.path):
        if isfile(join(self.path,f)):
            if f.endswith(".txt"):
                self.fileList.append(join(self.path,f))
        elif isdir(join(self.path,f)):
            CovPopulate(join(self.path,f))