未处理的stopIteration的os.walk错误

时间:2016-05-18 03:16:35

标签: python os.walk

我编写了一个python脚本,想要使用eric ide进行调试。当我运行它时,弹出一个错误unhandled StopIteration

我的代码段:

datasetname='../subdataset'
dirs=sorted(next(os.walk(datasetname))[1])

我是python的新手,所以,我真的不知道如何解决这个问题。为什么会出现此错误以及如何解决?

1 个答案:

答案 0 :(得分:3)

os.walk将在目录树中生成文件名。它将返回每个目录的内容。因为它是generator,所以当没有更多目录要迭代时,它会引发StopIteration异常。通常情况下,当您在for循环中使用它时,您看不到异常,但此处您直接调用了next

如果您将不存在的目录传递给它,将立即引发异常:

>>> next(os.walk('./doesnt-exist'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

您可以修改代码以使用for循环代替next,这样您就不必担心异常:

import os

for path, dirs, files in os.walk('./doesnt-exist'):
    dirs = sorted(dirs)
    break

另一种选择是使用try / except来捕获异常:

import os

try:
    dirs = sorted(next(os.walk('./doesnt-exist')))
except StopIteration:
    pass # Some error handling here