RuntimeError: generator raised StopIteration

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 异常退出循环。