如何解决Python中的stopietition错误?

2024-09-28 21:56:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚读了一些关于如何处理Python中stopietition错误的文章,我在解决我的特定示例时遇到了困难,我只想用我的代码从1到20打印出来,但它打印出了错误stopietition。我的代码是:(我是个新手,所以请不要阻止我。)

def simpleGeneratorFun(n):

    while n<20:
        yield (n)
        n=n+1
    # return [1,2,3]

x = simpleGeneratorFun(1)
while x.__next__() <20:
    print(x.__next__())
    if x.__next__()==10:
        break

Tags: 代码示例returnifdef错误文章next
3条回答

你可以试试,但这里的问题是重复。

x = simpleGeneratorFun(1)
print (x.__next__())
print (x.__next__())
print (x.__next__())
print (x.__next__())
print (x.__next__())
print (x.__next__())

任何时候你使用x.__next__()它都会得到下一个产生的数字-你不会检查每个产生的数字,10被跳过-所以它会在20后继续运行并中断。

修复:

def simpleGeneratorFun(n):

    while n<20:
        yield (n)
        n=n+1
    # return [1,2,3]

x = simpleGeneratorFun(1)
while True:
    try:
        val = next(x) # x.__next__() is "private", see @Aran-Frey comment 
        print(val)
        if val == 10:  
            break
    except StopIteration as e:
        print(e)
        break

首先,在每个循环迭代中,通过对__next__()进行3次单独的调用来推进迭代器3次,因此if x.__next__()==10可能永远不会被命中,因为第10个元素可能已经在前面被使用了。同样的,也会错过你的while状态。

其次,python中通常有更好的模式,您不需要直接调用next。例如,如果您有有限的迭代器,请使用For循环在StopIteration时自动中断:

x = simpleGeneratorFun(1)
for i in x:
    print i

相关问题 更多 >