2017-03-14 1 views
2

는 파이썬 2.7에서이 코드가 있습니다. 데스크탑에 파일 이름이있는 목록을 반환합니다. 내가 좋아하는 경로를 변경할 때 는하지만 : 이것은 dirs에도 적용됩니다os.walk()이 dir이나 파일을 정의하지 않는 이유는 무엇입니까? 작동</p> <pre><code># !/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) </code></pre> <p>:

NameError: name 'files' is not defined 

:

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

나는이 오류가 발생합니다.

무엇이 문제 일 수 있습니까? 그들은 결코 어떤 값을 할당되지있어 의미, 그래서 정의되지 않은 남아 -

+0

가 재생할 수없는 ... 그냥 궁금해서 –

+1

가 : 왜 하나가 어떤 조건없이 사이클의 침입 둘 것입니다 예를 들어

? –

답변

2

dirsfiles 경우 for 루프가 어떤 결과를 얻을하지 않았다 os.walk()을 의미, 종료 후 정의되지 않습니다.

찾는 작업에서 동일한 효과의 간단한 예이다 :

>>> 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 

os.walk(some_path) 어떤 결과를 산출하지 않는 명백한 설명은 some_path이 존재하지 않는 또는 inaccesible이다 .. . 아마도 Some_Dir이 없거나 OS에 액세스 할 권한이 없습니다.

$ 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

는 'os.walk'을 사용하여 재생할 수 없습니다. (저는 v3.4를 사용하고 있습니다) –

+0

알았습니다.하지만이 문제를 어떻게 해결할 수 있습니까? 폴더가 비어 있지 않기 때문에 –

+0

@ adrian.andreas 맞춤법 오류 또는 사용 권한 문제가 있는지 확인하십시오. –