为什么os.walk()没有定义dirs或文件?

时间:2017-03-14 20:05:08

标签: python linux python-2.7 undefined os.walk

我在Python 2.7中有这个代码:

# !/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)

哪个有效。它返回一个包含Desktop中文件名的列表。 但是当我改变路径时:

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

我收到此错误:

NameError: name 'files' is not defined

这也适用于dirs

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

如果在dirs循环终止后未定义filesfor,则表示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不存在或无法访问......所以大概你没有Some_Dir,或者你没有没有操作系统的许可来访问它。

例如:

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