【发布时间】:2016-06-12 22:17:38
【问题描述】:
我正在使用scandir 库来查看我计算机上的所有文件。一旦我检查了 100 条记录,我想停止循环。如果永远不会调用 yield 语句,我的变量 c 永远不会增加并且循环不会停止。我输入了一些虚假的文件名thisfilewontbefound,这些文件名永远不会被发现,因此永远不会到达yield。为什么c 不递增?
from scandir import scandir, walk
import sys
def subdirs(path):
for path, folders, files in walk(path):
for files in scandir(path):
if 'thisfilewontbefound' in files.path:
yield files.path
c = 0
for i in subdirs('C:\\'):
if c > 100:
print "test over"
sys.exit()
c += 1
print i
【问题讨论】:
-
因为
subdirs永远不会让步,所以for i in subdirs(...)的主体永远不会运行。 -
@gill 不应该对 C:\ 中的每个文件夹进行交互吗?
-
@user2242044 如果文件不存在,子目录的第一次迭代将永远不会产生任何元素。
-
subdirs仍然会迭代,但没有yield-ing 任何东西可以迭代for循环,所以最后for循环永远不会运行
标签: python python-2.7 generator yield