Python | 文法の基本:else

Python
スポンサーリンク

else の概要(条件が外れたときの“受け皿”)

else は、if(や elif)の条件がすべて成り立たなかった場合に実行する処理を書きます。分岐の「最後の受け皿」として、想定外や通常ケースの扱いを明確にできます。行末のコロン「:」と、その次の行からのインデントが必須です。


if/elif/else の基本構文(ここが重要)

排他的に一つだけ実行される流れ

ひとつの連鎖では、上から順に判定し、最初に True になったブロックだけが実行されます。どれも True にならなかった場合に else が実行されます。

score = 65
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "D"   # ここが実行される
print(f"評価: {grade}")
Python

else の役割は「条件外の扱いを明示する」こと。何もしないより、メッセージ表示やデフォルト値の設定などで意図を伝えると、後から読んだ人にも安全です。


使いどころの設計(通常系/異常系の切り分けを深掘り)

通常系を if/elif に、その他を else に

「基準を満たす」順に if/elif を並べ、それ以外の汎用ケースを else へ。これで優先順位が明確になります。

age = 15
if age < 6:
    fee = 0
elif 6 <= age < 13:
    fee = 300
elif 13 <= age < 18:
    fee = 500
else:
    fee = 800  # 18歳以上はここ
Python

未対応・想定外を明示する

想定外を黙って通すとバグの温床になります。未知の入力は else でログや例外を出すのが安全です。

def route(status: str) -> str:
    s = status.strip().casefold()
    if s == "new":
        return "登録画面"
    elif s == "active":
        return "ダッシュボード"
    elif s == "suspended":
        return "問い合わせ窓口"
    else:
        raise ValueError(f"未知のステータス: {status}")
Python

else のバリエーション(if だけじゃない)

ループの else(for/while と組み合わせ)

for/while にも else を付けられます。「ループが break せず正常終了したとき」だけ else が実行されます。探索の成否を簡潔に表せます。

target = 42
nums = [10, 20, 30]
for n in nums:
    if n == target:
        print("見つかった!")
        break
else:
    print("見つからなかった…")  # break が一度もなければここ
Python

この性質は「見つかったら早期終了、見つからなければ後処理」という定番に向いています。while でも同様です。

例外処理の else(try/except/else/finally)

try の中で例外が起きなかったときだけ else が実行されます。try には「失敗しうる最小限の処理」、else に「成功後の本処理」を置くと、構造が明確になります。

def to_int(text: str) -> int | None:
    try:
        value = int(text.strip())  # 失敗しうる変換
    except ValueError:
        return None                # 失敗時の分岐
    else:
        return value               # 成功時だけの後処理
    # finally は有無にかかわらず後始末
Python

よくある落とし穴と対策(重要ポイント)

並び順の誤りで意図が崩れる

広い条件を先に書くと、狭い条件に到達しません。強い条件(限定的)を先に、弱い条件(一般的)を後に並べましょう。

# 悪い例:>=80 が先。>=90 に到達しない
if score >= 80:
    grade = "B"
elif score >= 90:
    grade = "A"
Python

境界の抜け漏れ

帯の間に穴があると、意図せず else に落ちます。0〜100 のように範囲全体を網羅するよう設計し、最後に検証を入れるのも有効です。

if not (0 <= score <= 100):
    raise ValueError("0〜100の範囲で")
Python

else を乱用しない

「何もしない else」は意味が伝わりません。ログ、デフォルト、例外など、意図を表すコードを入れます。複雑化したら辞書マッピングや関数分配にリファクタリングしましょう。


例題で身につける(現場の定番パターン)

例題1:パスワード強度の分類

def strength(pw: str) -> str:
    pw = pw.strip()
    if len(pw) >= 12 and any(c.isdigit() for c in pw) and any(not c.isalnum() for c in pw):
        return "strong"
    elif len(pw) >= 8 and any(c.isdigit() for c in pw):
        return "medium"
    else:
        return "weak"
Python

例題2:コマンド処理(未知は明示的に拒否)

def run(cmd: str) -> None:
    cmd = cmd.strip().casefold()
    if cmd == "start":
        print("開始")
    elif cmd == "stop":
        print("停止")
    elif cmd == "pause":
        print("一時停止")
    else:
        print("不明なコマンド:", cmd)
Python

例題3:在庫・会員・購入可否(優先順位を明確化)

def can_buy(stock: int, is_member: bool) -> bool:
    if stock <= 0:
        return False       # 在庫切れ優先
    elif is_member:
        return True        # 会員ならOK
    else:
        return True        # 一般でも在庫があればOK
Python

例題4:ループの探索と else の活用

emails = ["a@example.com", "b@example.com"]
target = "c@example.com"
for e in emails:
    if e == target:
        print("登録済み")
        break
else:
    print("未登録")  # 見つからなかったときのみ
Python

まとめ

else は「条件に合致しない場合の扱い」を明確にするための最後の受け皿です。if/elif で優先順位と範囲を設計し、残りを else に落とすことで、意図が伝わる分岐になります。ループの else は「break なしで正常終了」を検知する強力な相棒、try/except の else は「成功後の処理」を分離して読みやすさを高めます。並び順と境界の網羅、未知入力の明示的な扱いを徹底すれば、初心者でも堅牢でわかりやすい分岐が書けます。

タイトルとURLをコピーしました