Pythonのelseによる条件分岐のデフォルト処理と使い方をわかりやすく解説

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

elseの概要

条件分岐およびループ・例外処理の「それ以外」 Python予約語

else

概要 else(エルス)は、主に条件分岐(if / elif)において「提示されたすべての条件式が False だった場合に実行するデフォルト処理」を定義するためのキーワードです。また、Python特有の仕様として、ループ構文(for / while)や例外処理(try)の末尾に結合して、特殊な後処理を行う役割も持っています。

わかりやすく説明 else は、プログラムにおける「それ以外、すべての残り」を受け止めるセーフティネット(受け皿)です。たとえば、「年齢が18歳以上なら成人画面を表示する」という条件(if)に対して、「それ以外のすべての人(17歳以下)」をまとめて一網打尽にして未成年用の画面へ案内するのが else の役割です。条件に引っかからずに迷子になるデータを出さないための、最後の砦と言えます。

  • ifelif のテストがすべて不成立に終わったときに、初めて自動的に呼び出されるブロックです。
  • 単独で else: と記述することはできず、必ず親となる ifforwhiletry のブロックと垂直のインデント(位置)を揃えてセットで記述します。
  • ループ(for / while)と組み合わせた場合は「途中で一度も break されずに回りきったとき」、例外処理(try)と組み合わせた場合は「一度もエラーが発生しなかったとき」という、状況に応じた強力な「正常終了チェック」としても機能します。

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つ以上のブロックが実行される可能性があります)。 一方で elifelse で繋げた場合は、「どれか1つでも合格したら、残りの審査はすべてキャンセルして即座にグループから抜ける」という挙動になります。無駄な条件計算を減らし、想定外の二重実行バグを防ぐためにも、地続きの条件は else / elif で繋ぐのが基本です。
Q: `else:` の後ろに、さらに条件式を追加することはできますか?
A: できません。else は「それ以外のすべて(条件なし)」を受け止める場所です。もし「〜以外で、かつ〇〇な場合」とさらに条件を絞り込みたい場合は、else ではなく elif 条件式: を使用してください。
Q: ループの `else` 構文(for ... else)は、可読性が悪いので実務では使わない方がいいと聞きましたが本当ですか?
A: 一理あります。Pythonを学びたてのエンジニアや、他言語(C言語やJavaなど)から移ってきた人にとって、ループに else がくっついているコードは直感的に「どういう時に動くのか」が分かりにくく、敬遠されることがあります。チーム開発で使う際は、コードに簡単なコメントを添えるか、あるいはあえて古典的な「フラグ変数」を使った記述に置き換えるなど、周囲の習熟度に合わせる工夫をすると親切です。

まとめ

else は、あらゆる処理において「メインの期待ルートから外れたケース」を漏れなくハンドリングするための、ロジック設計の基盤となる予約語です。

  • 条件分岐(if / elif)の終端に配置し、どの条件にも引っかからなかったデータのデフォルト処理を受け持つ。
  • forwhile などのループ処理の末尾では、「break による脱出が起きずに正常完走したか」を判定するシグナルとなる。
  • 例外処理(try)の末尾では、「エラーが何も発生しなかった安全な状態」でのみ動かすコードの隔離場所となる。

単なる条件の「おまけ」としてではなく、処理が迷宮入りするのを未然に防ぐ重要な防御壁として else を正しく配置し、どんなイレギュラーなデータが飛び込んできても耐えられる、穴のない堅牢なシステムを構築できるようになりましょう。