我编写了一个python脚本,想要使用eric ide进行调试。当我运行它时,弹出一个错误unhandled StopIteration
我的代码段:
datasetname='../subdataset'
dirs=sorted(next(os.walk(datasetname))[1])
我是python的新手,所以,我真的不知道如何解决这个问题。为什么会出现此错误以及如何解决?
答案 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