我刚刚阅读了一些关于如何处理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
答案 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__())