【发布时间】:2015-04-02 01:20:50
【问题描述】:
我今天遇到了一个错误,因为我使用next() 来提取一个值,而“未找到”会发出一个StopIteration。
通常这会停止程序,但使用 next 的函数在 all() 迭代内被调用,因此 all 只是提前终止并返回 True。
这是预期的行为吗?是否有样式指南可以帮助避免此类事情?
简化示例:
def error(): return next(i for i in range(3) if i==10)
error() # fails with StopIteration
all(error() for i in range(2)) # returns True
【问题讨论】:
-
@tdelaney 因为
any返回True如果可迭代包含任何值True。all返回True如果迭代不包含False的值。 -
所以...,集合中的所有项目都是真实的(因为没有任何项目),但没有一个项目是真实的(因为没有任何项目)。
-
next((i for i in range(3) if i==10), None)将返回None而不是引发StopIteration异常。 -
@FrédéricHamidi - 嗯,我就是这么说的。
标签: python python-3.x generator generator-expression