for iteration, batch in enumerate(gen):
RuntimeError: generator raised StopIteration
如何解决?
这个错误通常是由于生成器(generator)已经迭代完所有的元素,但在程序中我们还在对其进行迭代,所以出现 StopIteration 的异常。
一般来说,我们需要在每次使用生成器时使用 try...except
块来捕获这个异常。代码如下:
gen = some_generator()
while True:
try:
batch = next(gen)
# 进行一些操作
except StopIteration:
# 当生成器没有元素时,退出循环
break
其中,next(gen)
调用生成器的 __next__()
方法获取下一个元素,如果不存在下一个元素则会抛出 StopIteration
异常,捕获后可以退出循环。
另外,在 for 循环中使用这个方法也可以避免这个错误:
gen = some_generator()
for iteration in itertools.count():
try:
batch = next(gen)
# 进行一些操作
except StopIteration:
break
其中 itertools.count()
可以生成从0开始的自然数序列,循环可以一直进行下去,直到生成器遇到 StopIteration 异常退出循环。