我在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
。
可能是什么问题?
答案 0 :(得分:2)
如果在dirs
循环终止后未定义files
和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
不存在或无法访问......所以大概你没有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
>>>