elseの概要
| 条件分岐およびループ・例外処理の「それ以外」 Python予約語 | ||
|
else 概要 わかりやすく説明 |
||
|
elseの考え方をイメージで理解

elseの基本的な使い方
最も王道な、if の条件が False になったときに「それ以外」の処理を else で拾い上げるシンプルな例です。
# else を使った標準的な条件分岐
x = 10
if x > 20:
print("x は 20 より大きい")
else:
# x が 20 以下(条件不成立)なので、ここが実行されます
print("x は 20 以下")
x > 20は不成立(False)となるため、ifブロックは無視され、else:の直下にある処理が自動的に選択されます。
elif と組み合わせた多重分岐のelse
いくつもの条件を上から順番に審査していき、そのどれにも合格しなかった「最後の残りかす」を else で一括処理する例です。
# elif と else の組み合わせによる評価
score = 45
if score >= 80:
print("合格")
elif score >= 50:
print("再試験")
else:
# 80以上でも50以上でもない、すべての数値(49点以下)がここに集約されます
print("不合格")
else を while ループで使う(Python固有の特殊な構文)
while ループと else を組み合わせると、「条件式が False になってループが最後まで平和に回りきったとき」にだけ実行する後処理を記述できます。
# while ループの else
count = 0
while count < 3:
print(f"カウント: {count}")
count += 1
else:
# count が 3 になり、while の条件が満たされなくなった瞬間にここを通ります
print("ループが最後まで正常に終了しました。")
else を for ループで使う(実務での早期脱出チェック)
for ループの else は、実務において「探していたものがリストの中に1つも見つからなかった(=途中で一度も break されなかった)」という事実を検知するのに非常に役立ちます。
# for ループの else によるフラグレス探索
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 6:
print("見つかりました!")
break # もし 6 が見つかれば、ループと共に末尾の else もスキップします
else:
# リストを最後まで探し終えても 6 が見つからなかったため、ここが実行されます
print("ターゲット(6)はリスト内に見つかりませんでした。")
- 他言語では「見つかったかどうかのフラグ変数(
found = Falseなど)」を用意する必要がありますが、Pythonではfor ... elseを使うだけでフラグなしでスマートに完結できます。
elseの注意点
- 「for / while ... else」は break が発動すると実行されない(超重要):ループの
elseブロックは、「一度も途中で邪魔されずに、最後までループが走りきったこと」へのご褒美として実行されます。途中でbreakが1回でも実行されて強制脱出した場合は、elseブロックは完全に無視されてスキップされます。# 【失敗を招きやすい挙動の例】 for x in [1, 2, 3]: if x == 2: break # ここで強制終了すると、下の else は実行されません! else: print("最後まで回りました") # この行は無視されます - インデント(字下げ)のズレによる致命的なバグ:
ifに紐付けたいelseなのか、それともforなどのループに紐付けたいelseなのかは、「縦のインデントの開始位置」だけで機械的に判定されます。スペース4個分のズレが、プログラムの動作を全く別物に変えてしまうため、記述時は細心の注意を払ってください。# 【悪い例:インデントの勘違い】 for x in range(3): if x == 5: print("発見") else: # これは if 文の else。ループのたびに毎回「それ以外」として実行されてしまいます! # 【意図した通り:ループに対する else】 for x in range(3): if x == 5: print("発見") else: # 縦のラインが for と揃っているため、これは「ループ全体が終わった後」に1回だけ実行されます - 「try ... except ... else」構文における挙動の違い:Pythonの例外処理(エラーハンドリング)でも
elseが使えますが、ここでの意味は「エラー(例外)が一度も発生しなかったときに実行する」となります。ifの「条件がダメだったとき」とはニュアンスが逆になるため、混乱しないように整理しておきましょう。
elseのよくある質問
- Q: `if` だけを連続して書くのと、`elif` や `else` を繋げて書くのでは何が違うのですか?
- A: 「条件分岐のグループが独立しているか、連動しているか」が異なります。
ifを縦に並べると、すべてのif文がそれぞれ完全に別個のイベントとして毎回すべて審査されます(同時に2つ以上のブロックが実行される可能性があります)。 一方でelifやelseで繋げた場合は、「どれか1つでも合格したら、残りの審査はすべてキャンセルして即座にグループから抜ける」という挙動になります。無駄な条件計算を減らし、想定外の二重実行バグを防ぐためにも、地続きの条件はelse/elifで繋ぐのが基本です。 - Q: `else:` の後ろに、さらに条件式を追加することはできますか?
- A: できません。
elseは「それ以外のすべて(条件なし)」を受け止める場所です。もし「〜以外で、かつ〇〇な場合」とさらに条件を絞り込みたい場合は、elseではなくelif 条件式:を使用してください。 - Q: ループの `else` 構文(for ... else)は、可読性が悪いので実務では使わない方がいいと聞きましたが本当ですか?
- A: 一理あります。Pythonを学びたてのエンジニアや、他言語(C言語やJavaなど)から移ってきた人にとって、ループに
elseがくっついているコードは直感的に「どういう時に動くのか」が分かりにくく、敬遠されることがあります。チーム開発で使う際は、コードに簡単なコメントを添えるか、あるいはあえて古典的な「フラグ変数」を使った記述に置き換えるなど、周囲の習熟度に合わせる工夫をすると親切です。
まとめ
else は、あらゆる処理において「メインの期待ルートから外れたケース」を漏れなくハンドリングするための、ロジック設計の基盤となる予約語です。
- 条件分岐(
if/elif)の終端に配置し、どの条件にも引っかからなかったデータのデフォルト処理を受け持つ。 forやwhileなどのループ処理の末尾では、「breakによる脱出が起きずに正常完走したか」を判定するシグナルとなる。- 例外処理(
try)の末尾では、「エラーが何も発生しなかった安全な状態」でのみ動かすコードの隔離場所となる。
単なる条件の「おまけ」としてではなく、処理が迷宮入りするのを未然に防ぐ重要な防御壁として else を正しく配置し、どんなイレギュラーなデータが飛び込んできても耐えられる、穴のない堅牢なシステムを構築できるようになりましょう。