ネストしたforループから脱出するには例外を使う

タイトルで言いたいことがすんでしまった^^)

forループを途中で脱出するにはbreakを使うけど、breakではひとつのループしか脱出してくれない。たとえば次の例ではbreakしても外側のforループは回り続けて、else節が実行される。

for i in range(5):
    for j in range(5):
        k = i + j
        print k
        if k > 5:
            break

        else:
            print "End of nested loop."
^o^ > python nested_loop.py
0
1
2
3
4
1
2
3
4
5
2
3
4
5
6
3
4
5
6
4
5
6
End of nested loop.

外側のforループもいっぺんに脱出したいときには、例外を使う。たとえばこんなふうに:

class EndLoop(Exception):
    pass

try:
    for i in range(5):
        for j in range(5):
            k = i + j
            print k
            if k > 5:
                raise EndLoop
            else:
                print "End of nested loop."
except EndLoop:
    print "Break in loop."

実行すると、ちゃんと途中でふたつのforループを抜け出していることがわかる。

^o^ > python nested_loop2.py
0
1
2
3
4
1
2
3
4
5
2
3
4
5
6
Break in loop.