2017-03-14 2 views
2

Ich habe diesen Code in Python 2.7:Warum definiert os.walk() keine Verzeichnisse oder Dateien?

# !/usr/bin/python 

import os 
root=os.path.normpath('/home/andreas/Desktop/') 

print root 
for root, dirs,files in os.walk(root, topdown=True): 
    break 
print(files) 

Welche funktioniert. Es gibt eine Liste mit den Dateinamen in Desktop zurück. Aber wenn ich den Pfad so ändern:

root=os.path.normpath('/home/andreas/Desktop/Some_Dir') 

bekomme ich diesen Fehler:

NameError: name 'files' is not defined 

Dies gilt auch für dirs gilt.

Was könnte das Problem sein?

+0

nicht reproduzieren ... –

+1

Nur neugierig, warum würde man die für den Zyklus ohne Bedingungen setzen brechen in? –

Antwort

2

Wenn dirs und files nicht definiert sind nach dem for Schleife endet, das heißt os.walk() brachte keine Ergebnisse ergeben - was bedeutet, dass sie niemals einen Wert zugewiesen wurde, und so undefiniert bleiben.

Hier ist ein einfaches Beispiel für die gleiche Wirkung in Aktion:

>>> for x in []: # empty 
...  pass 
... 
>>> x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'x' is not defined 

>>> for x in [1, 2, 3]: 
...  pass 
... 
>>> x 
3 

Die offensichtliche Erklärung für os.walk(some_path) keine Ergebnisse ergibt, ist, dass some_path nicht oder ist nicht vorhanden inaccesible .. Wahrscheinlich haben Sie also keine Some_Dir, oder Sie haben keine Berechtigung vom Betriebssystem, um darauf zuzugreifen.

Zum Beispiel:

$ mkdir nope 
$ chmod a-rwx nope 
$ python 
Python 2.7.13 (default, Jan 13 2017, 10:15:16) 
[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> for root, dirs, files in os.walk('nope'): 
...  break 
... 
>>> dirs 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'dirs' is not defined 
>>> files 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'files' is not defined 
>>> 
+0

kann nicht mit 'os.walk' reproduziert werden, oder? (Ich benutze v3.4) –

+0

Ok, ich verstehe, aber wie kann ich dieses Problem beheben? Da der Ordner nicht leer –

+0

ist @ adrian.andreas nach einem Rechtschreibfehler oder Berechtigungen Problem suchen. –

Verwandte Themen