2016-08-03 19 views
0

Ich versuche Suche Dateien zu scannen/und es wirft:Python Indexerror, wenn Dateien scannen

IndexError: list index out of range on the line "list = self.scanFolder(path[t])"

Dies ist ein Objekt und hat einige Methoden/Funktionen, die hier nicht dargestellt sind, da sie nicht relevant sind dieser Code.

def scanFolder(self, path): 
    try: 
     return os.listdir(path) 
    except WindowsError: 
     return "%access-denied%" 

def separate(self, files): 
    #Give Param of Files with exact path 
    file = [] 
    dir = [] 
    for x in range(len(files)): 

     if os.path.isfile(files[x]): 

      file.append(files[x]) 

    for x in range(len(files)): 
     if os.path.isdir(files[x]): 
      dir.append(files[x]) 
    return file, dir 

    def startScan(self): 
    driveLetters = self.getDrives() 
    matches = [] 
    paths = [] 
    paths2 = [] 
    path = "C:/" 
    list = self.scanFolder(path) 

    if list != "%access-denied%": 
     for i in range(len(list)): 
      list[i] = os.path.join(path, list[i]) 

     files, dirs = self.separate(list) 
     paths2.extend(dirs) 
     for i in range(len(files)): 
      if files[i].lower() in self.keyword.lower(): 
       matches.append(files[i]) 

     paths = [] 
     paths = paths2 
     paths2 = [] 
    while paths != []: 
     for t in range(len(paths)): 

      print(paths) 
      print(t) 
      list = self.scanFolder(paths[t]) 
      if list != "%access-denied%": 
       for i in range(len(list)): 
        list[i] = os.path.join(paths[t], list[i]) 

       files, dirs = self.separate(list) 
       if dirs != []: 
        paths2.extend(dirs) 
       for i in range(len(files)): 
        if files[i].lower() in self.keyword.lower(): 
         matches.append(files[t]) 

       paths = paths2 
       paths2 = [] 

    return matches 

Antwort

1

Sie versuchen, auf eine ungültige Position zuzugreifen.

for t in range(len(paths)): 
    print(paths) 
    print(t) 
    list = self.scanFolder(paths[t]) 

Die gültigen Listen Indizes 0..len (Pfad) -1

Sie sollten die Listenelemente in einer pythonic Form zugreifen:

for path in paths: 
    list = self.scanFolder(path) 

Wenn Sie einige Liste ändern Element, sollten Sie verwenden enumerate():

for pos, path in enumerate(paths): 
    print ("paths[%s] = %s" %(pos, path))