考虑以下示例:
def fn(x):
if x > 2:
raise StopIteration
return x
results = list(map(fn, range(5)))
print(results)
当我用 python 2 运行它时,我得到了我的预期:
Traceback (most recent call last):
File "example.py", line 5, in <module>
results = list(map(fn, range(5)))
File "example.py", line 3, in fn
raise StopIteration
StopIteration
但是,如果我使用 python 3 运行它,程序不会以StopIteration
异常结束。它打印以下结果:
[0, 1, 2]
python 3(特别是 python 3.5.1)中的map
函数似乎捕获并处理StopIteration
异常,就好像提供的 iterable 抛出了它一样。这是一个错误吗?