2016-05-18 3 views
2

Ich habe ein Python-Skript geschrieben und wollte es mit Eric Ide debuggen. Als ich es lief, tauchte ein Fehler unhandled StopIterationos.walk Fehler von unbehandelt stopIteration

Meine Code-Schnipsel sagte up:

datasetname='../subdataset' 
dirs=sorted(next(os.walk(datasetname))[1]) 

Ich bin neu in Python und so, ich weiß wirklich nicht, wie dies zu beheben. Warum taucht dieser Fehler auf und wie behebe ich ihn?

Antwort

3

os.walk generiert Dateinamen in einer Verzeichnisstruktur, die es herunterfährt. Es wird den Inhalt für jedes Verzeichnis zurückgeben. Da es ein generator ist, wird es StopIteration Ausnahme auslösen, wenn es keine Verzeichnisse mehr zu iterieren gibt. Wenn Sie es in der Schleife for verwenden, sehen Sie die Ausnahme normalerweise nicht, aber hier rufen Sie next direkt an.

Wenn Sie passieren nicht vorhandenes Verzeichnis wird unverzüglich die die Ausnahme ausgelöst:

>>> next(os.walk('./doesnt-exist')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 

Sie Ihren Code ändern könnten for Schleife statt next zu verwenden, so dass Sie sich nicht um die Sorgen zu machen würden Ausnahme:

import os 

for path, dirs, files in os.walk('./doesnt-exist'): 
    dirs = sorted(dirs) 
    break 

die andere Option ist try/except zu verwenden, um die Ausnahme zu fangen:

import os 

try: 
    dirs = sorted(next(os.walk('./doesnt-exist'))) 
except StopIteration: 
    pass # Some error handling here 
+0

Okay! Aber wie könnte ich das beheben? – RaviTej310

+0

@Sibi Hinzugefügt paar Beispiele zu beantworten – niemmi

+0

Ja, dieser Fehler wurde behoben, aber jetzt bekomme ich einen neuen Fehler zwei Zeilen unten in 'leng = len (dirs);' '' name 'dirs ist nicht definiert "' – RaviTej310