You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python中的StopIteration错误?新手代码报错求助

解决Python生成器的StopIteration错误问题

嘿,别担心,新手遇到这种问题太正常了!咱们来一步步拆解你的代码问题所在:

你的代码核心问题

你在while循环里连续调用了三次x.__next__(),这直接导致了两个问题:

  1. 每次循环会跳过多个数值(比如第一次判断用了1,打印用了2,判断是否等于10用了3,完全打乱了正常的取值逻辑)
  2. 当生成器耗尽所有可生成的数值后,再调用__next__()就会触发StopIteration错误——这是生成器的正常结束信号,但你没做任何处理。

另外你的生成器循环条件是n<20,这意味着它最多生成到19,没法输出20哦。

修正后的代码(推荐写法)

用for循环遍历生成器是Python里最简洁且安全的方式,它会自动处理StopIteration,不用手动调用__next__():

def simpleGeneratorFun(n):
    while n <= 20:  # 改成<=20才能生成到20
        yield n
        n = n + 1

x = simpleGeneratorFun(1)
for num in x:
    print(num)
    if num == 10:
        break

如果一定要用while循环的写法

如果你想手动控制迭代过程,记得把每次取出的生成器值存到变量里,避免多次调用__next__(),同时捕获StopIteration错误:

def simpleGeneratorFun(n):
    while n <= 20:
        yield n
        n = n + 1

x = simpleGeneratorFun(1)
try:
    while True:
        num = x.__next__()  # 只调用一次,存到变量里复用
        print(num)
        if num == 10:
            break
except StopIteration:
    # 生成器耗尽时会触发这个异常,我们捕获后直接结束即可
    pass

补充说明

生成器是一次性迭代对象,每次调用__next__()都会取下一个值,直到没有值可取时抛出StopIteration。所以绝对不能在一个循环里多次调用它,否则会打乱你的取值逻辑,还容易触发错误~

内容的提问来源于stack exchange,提问作者Barish Ahsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:11:05