如何解决Python中的StopIteration错误?

时间:2018-04-27 19:48:13

标签: python while-loop conditional break stopiteration

我刚刚阅读了一些关于如何处理Python中的StopIteration错误的帖子,我无法解决我的特定示例。我只想用我的代码打印出1到20但是它打印出错误StopIteration。我的代码是:(我是一个完全新手,所以请不要阻止我。)

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

3 个答案:

答案 0 :(得分:1)

任何时候你使用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

答案 1 :(得分:1)

首先,在每次循环迭代中,你通过对@InjectMocks private MyClass myClass; @Test public void testExample() { myClass.handler(); } 进行3次单独调用来推进迭代器3次,因此__next__()可能永远不会被命中,因为第10个元素可能早先被消耗了。同样缺少你的条件。

其次,python中通常有更好的模式,你不需要直接调用if x.__next__()==10。例如,如果您有有限的迭代器,请使用for循环在StopIteration上自动中断:

next

答案 2 :(得分:-1)

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

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