次の例を検討してください。
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
しかし、python3で実行するとStopIteration
例外でプログラムが終了しません。次の結果が出力されます。
[0, 1, 2]
map
Python 3 (具体的には python 3.5.1)の関数はStopIteration
、提供された iterable が例外をスローしたかのように、例外をキャッチして処理するようです。これはバグですか?