Pythonのループ文にはfor文とwhile文の2種類が用意されており、for文は一定の回数、while文は特定の条件を満たす間、処理を繰り返していきます。同じ処理を何度も入力しなくても繰り返してくれる便利な構文ですが、時には途中でループ文を抜け出したくなる時があります。そんな時はbreak文を使えば処理を中断し、ループ文を抜け出す事が出来ます。今回はbreak文の使い方について説明します。

break文の使い方

ループ処理を途中で終了したい場合は、if文を使えば疑似的に実現することができます。例として、ループの要素を調べ、100より大きい数字があった場合はエラーとなるコードを書きたいとします。

list1 = [24, 55, 32, 65, 74, 120, 72, 67]
loop_flag = 0
for num in list1:
    if(loop_flag == 0):
        if(num < 100):
            print(num)
        else:
            loop_flag = 1
if(loop_flag == 1):
    print('エラー:無効な数字が見つかりました')

実行結果

24
55
32
65
74
エラー:無効な数字が見つかりました

この例では、ループを続けるかどうかのフラグ(loop_flag)を用意し、条件を満たす数字が出てきた場合にはフラグを1にしてループ内の処理を実行しないようにしています。この方法なら見かけ上はループを中断しているように見えますが、実際には途中から何もしないループをしているだけでとても無駄ですし、コードも長いです。こんな時はbreak文を使いましょう。

list1 = [24, 55, 32, 65, 74, 120, 72, 67]
for num in list1:
    if(num >= 100):
        print('エラー:無効な数字が見つかりました')
        break
    print(num)

実行結果

24
55
32
65
74
エラー:無効な数字が見つかりました

実行結果はさきほどと全く同じですが、breakを使ったほうが短いですし、見やすいですね。break文はループ文の中で主にif文とともに使われます。if文で特定の条件を満たした場合に、break文を使ってループを途中で中断し、抜け出します。break文以降の構文はすべてスキップされるので、エラー文などを表示する際は、break文より前に記述するようにしましょう。

while文におけるbreak文

途中でループを中断するbreak文ですが、当然while文で使うこともできます。

list1 = [24, 55, 32, 65, 74, 120, 72, 67]
index = 0
while(index < len(list1)):
    if(list1[index] >= 100):
        print('エラー:無効な数字が見つかりました')
        break
    print(list1[index])
    index += 1

実行結果

24
55
32
65
74
エラー:無効な数字が見つかりました

さきほどのfor文をwhile文に置き換えましたが、break文の使い方は同じです。もちろん結果も同様になります。

else節とbreak文

Pythonのfor文およびwhile文にはif文と同様にelse節が用意されています。ループ文のelse節は、その繰り返しが正しく終了する場合に実行されます。例えば、一通りループ文を回した後に、そのループ文が終わったことを伝えるメッセージを表示したい場合は、次のようになります。

list1 = [24, 55, 32, 65, 74, 120, 72, 67]
index = 0
for num in list1:
    print(num)
else:
    print('ループが完了しました。')

実行結果

24
55
32
65
74
120
72
67
ループが完了しました。

同じループのブロックの中で、最後の一度だけ処理を行うことが出来るので、非常に便利なelse節ですが、実はbreak文でループを抜けた場合は実行されません。

list1 = [24, 55, 32, 65, 74, 120, 72, 67]
index = 0
for num in list1:
    if(num >= 100):
        print('エラー:無効な数字が見つかりました')
        break
    print(num)
else:
    print('ループが完了しました。')

実行結果

24
55
32
65
74
エラー:無効な数字が見つかりました

こちらは、これまでの例と同様に100以上の数字が見つかった場合はエラーとなり、ループをbreakで抜けるようにしています。すると、最後のelse節が実行されず、「ループが完了しました」というメッセージは表示されません。
breakとelseを使えば、「breakをしたかどうか判断し、していない時だけ特定の処理をする」ことが簡単に出来ます。
本来であればbreakしたかどうかを判断するための変数を用意して、if文で変数の中身を確認してbreakしたかどうかを判断します。無駄な変数が増えてしまいますし、面倒ですね。else節なら、その中にbreakしていない時だけ行う処理を書くだけで終わってしまいます。無駄な変数もif文も必要ありませんね。