Pythonのイテレータには、Javaのhas_nextのようなメソッドがない。
イテレータの最後まで到達したとき、StopIterationというエラーが投げられてイテレーションが終了する。
そのため、StopIteration例外をキャッチする必要がある。
あるいは、nextで値を抽出する場合に、以下のように第2引数を指定して抽出する方法もある。
value = next(iterator, None) ← next(iterator)がエラーの場合にNoneが返される。
- イテレータの例外発生時の対応をしない場合
fruits = ['Apple', 'Grape', 'Banana', 'Lemon']
iter_fruits = iter(fruits)
iter_fruits = iter(fruits)
fruit = next(iter_fruits)
while(fruit):
print(fruit)
fruit = next(iter_fruits)
# lemonまで到達すると、その次に例外が発生する
- 例外をキャッチする場合
fruits = ['Apple', 'Grape', 'Banana', 'Lemon']
iter_fruits = iter(fruits)
try:
fruit = next(iter_fruits)
while(fruit):
print(fruit)
fruit = next(iter_fruits)
except StopIteration: # 例外をキャッチ
pass
- 例外が発生した場合に別の値を返す場合
fruits = ['Apple', 'Grape', 'Banana', 'Lemon']
iter_fruits = iter(fruits)
fruit = next(iter_fruits, None)# 第2引数を与える
while(fruit):
print(fruit)
fruit = next(iter_fruits, None) # 例外が発生するとNoneを返して、ループを抜けることができる