0

ディレクトリとサブディレクトリをウォークスルーしようとすると、次のコードでエラーが発生します。ここでは、コンストラクターを再帰的に呼び出そうとしています。

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() を定義しています

今回は同期エラーをチェックしました:/

4

1 に答える 1

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))
于 2013-09-13T10:29:37.273 に答える