Pythonでは else がさまざまな構文で使われますが、それぞれの意味が違っていて混乱しやすいと感じました。
自分の学習のために、else の使い方と意味の違いを整理してみました。
1. if ... else(基本の条件分岐)
まずは最も基本的な条件分岐です。これは他の言語と同じような感覚で使えます。
x = 10
if x > 5:
print("5より大きい")
else:
print("5以下")
補足:1行で書ける if ... else
条件に応じて値を1行で代入したい場合、次のような書き方ができます。
x = 10
result = "大きい" if x > 5 else "小さい"
print(result) # 出力: 大きい
このような書き方は「三項演算子」と呼ばれることもあります。
2. for ... else(ループが最後まで実行されたときの処理)
for 文に else をつけると、「break されずに最後までループが終わったとき」に else 節が実行されます。
for num in [1, 2, 3, 4, 5]:
if num == 3:
break
else:
print("ループを最後まで回りました") # これは実行されません
num == 3 で break されたため、else は実行されません。
逆に break されなかった場合は else が実行されます。
for num in [1, 2, 3]:
print(num)
else:
print("ループを最後まで回りました") # 実行されます
3. while ... else(ループが最後まで実行されたときの処理)
while 文にも else を使うことができます。意味は for と同じで、break されずにループが終わった場合に else が実行されます。
i = 0
while i < 3:
print(i)
i += 1
else:
print("正常終了") # 実行されます
ただし、break されると else は実行されません。
i = 0
while i < 3:
if i == 1:
break
print(i)
i += 1
else:
print("正常終了") # 実行されません
4. try ... else(エラーが出なかったときの処理)
try 文の中でエラーが発生しなかった場合に、else が実行されます。
try:
result = 10 / 2
except ZeroDivisionError:
print("ゼロ除算エラーが発生しました")
else:
print("正常に計算できました:", result)
エラーが起きると else は実行されません。
try:
result = 10 / 0
except ZeroDivisionError:
print("ゼロ除算エラーが発生しました")
else:
print("正常に計算できました:", result) # 実行されません
※補足:finally は例外の有無に関係なく常に実行されるブロックで、else とは役割が異なります。
5. else の使い方まとめ表
| 文法 |
else の意味 |
よくある用途 |
|---|---|---|
if ... else |
条件により処理を分ける | 基本の分岐 |
for ... else |
break されなければ実行される |
ループで「見つからなかった」時など |
while ... else |
break されなければ実行される |
ループ抜けのチェック |
try ... else |
例外がなければ実行される | 正常処理後の追加処理 |
覚え方のコツ(else がいつ実行されるか)
構文ごとに else の意味が違うので、自分なりに以下のように覚えると整理しやすいと思いました。
| 構文 |
else が実行される条件 |
覚え方のコツ |
|---|---|---|
for ... else |
break されなかったら |
「breakしなかったら」 |
while ... else |
break されなかったら |
「breakしなかったら」 |
try ... else |
エラーが出なかったら | 「エラーが出なかったら」 |
おわりに
こうして整理してみると、Python の else は構文ごとに意味が違っていてややこしいと感じました。
特に for ... else や try ... else は他の言語では見かけない形なので、しっかり使い分けられるように練習していきたいです。