在Python中这样做安全吗(例如,在解析器中)?
iterator = iter(some_iterable)
for x in iterator:
# do stuff with x
if some_condition(x):
y = next(iterator)
# do stuff with y我在Python 2和3中进行了测试,它做了我期望的事情,但我不知道它是否真的安全,是否是惯用的。上述代码应相当于以下更详细的备选方案:
iterator = iter(some_iterable)
while True:
try:
x = next(iterator)
except StopIteration:
break
# do stuff with x
if some_condition(x):
y = next(iterator)
# do stuff with y发布于 2016-10-08 19:11:21
基本上,跟踪异常并正确处理它们总是更好。但是,关于while和for循环之间的区别--在本例中,当您在while循环中调用next()函数时,总是可以引发StopIteration异常,但是当您使用基于next()调用数和迭代次数的for循环时,可能会有所不同。
例如,在这种情况下,对于偶数的迭代,它不会引发异常,但对于概率,则会引发异常。原因是,在偶数迭代数中,您的下一个迭代始终是for循环前面的一个项,而对于偶数则不是这样。
In [1]: it = iter(range(4))
In [2]: for x in it:
...: print(x)
...: next(it)
...:
0
2
In [3]: it = iter(range(3))
In [4]: for x in it:
print(x)
next(it)
...:
0
2
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-4-1b3db7079e29> in <module>()
1 for x in it:
2 print(x)
----> 3 next(it)
4
StopIteration: https://stackoverflow.com/questions/39936220
复制相似问题