C
Python/中級/Lesson 15

try-except — Python 例外処理

15分·theory
このチャプター
7/8

try-except — Python 例外処理

🎯 このレッスンを読み終えたら

このレッスンをすべて読み終えたら、以下の3つを自信を持ってできるようになります。

  • ✅ try-except-else-finally の4ステップ構造
  • ✅ 具体的な例外クラスのキャッチ + broad except の回避
  • ✅ raise ... from ... による原因チェーン

学習目標をチェックリストとして手元に置き、すべて答えられるようになったらレッスンを閉じてください。

try-except 6つのパターン — コード + 実行結果

try-except = エラーが発生してもプログラムを止めずに処理する。本番コードの安全網です。

1. 最もシンプルな形

python
年齢_文字列 = "スモルヨドル"

try:
    年齢 = int(年齢_文字列)              # ❌ エラー発生
    print(年齢)
except:
    print("数字に変換できませんでした!")

# 出力: 数字に変換できませんでした!
# プログラムは停止せず次に進む

⚠️ except: だけ書くとすべてのエラーをキャッチ — デバッグが難しくなります。具体的な型を指定することを推奨。


2. 具体的なエラー型をキャッチする

python
try:
    年齢 = int(input("年齢? "))
    print(100 / 年齢)
except ValueError:                 # int 変換失敗
    print("数字のみ入力してください")
except ZeroDivisionError:           # 0で除算
    print("0 はダメです")
except Exception as e:              # その他すべてのエラー
    print(f"予期せぬエラー: {e}")

except ValueError:ValueError のみをキャッチします。それ以外のエラーは素通りします。


3. elsefinally

python
try:
    ファイル = open("data.txt")
    内容 = ファイル.read()
except FileNotFoundError:
    print("ファイルなし")
else:
    # try が成功した場合のみ
    print(f"読み込んだ文字数: {len(内容)}")
finally:
    # 成功・失敗に関わらず *常に* 実行
    print("クリーンアップ作業")
    ファイル.close() if "ファイル" in dir() else None

finally = 「後処理」コード — ファイルやデータベース接続のクローズなど。


4. raise — 意図的にエラーを発生させる

python
def 年齢_登録(年齢):
    if 年齢 < 0:
        raise ValueError("年齢は負数にはできません")
    if 年齢 > 150:
        raise ValueError("150歳を超える人 X")
    print(f"登録: {年齢}歳")

try:
    年齢_登録(-5)
except ValueError as e:
    print(f"入力エラー: {e}")

# 出力: 入力エラー: 年齢は負数にはできません

raise意図的にエラーを発生させる — 不正な入力を弾く標準的な方法です。


5. カスタム例外クラス

python
class 残高不足(Exception):
    """銀行出金時の残高不足"""
    pass

def 出金(残高, 要求):
    if 要求 > 残高:
        raise 残高不足(f"残高 {残高} < 要求 {要求}")
    return 残高 - 要求

try:
    new_残高 = 出金(1000, 5000)
except 残高不足 as e:
    print(f"⚠️ {e}")

# 出力: ⚠️ 残高 1000 < 要求 5000

6. よく使うエラーの種類

python
"abc"[10]              # IndexError
{}["ないキー"]            # KeyError
int("abc")             # ValueError
1 / 0                  # ZeroDivisionError
open("ないファイル")        # FileNotFoundError
[1,2] + 3              # TypeError
ない_変数              # NameError

エラーメッセージにはどの種類かが必ず先頭行に表示されます — その名前で except を書きます。


1行まとめ

キーワード役割
try試みるコード
exceptエラーをキャッチ (具体的な型を推奨)
elsetryが成功した場合のみ
finally常に実行 (後処理)
raise意図的にエラーを発生させる

核心: ユーザー入力・ファイル・ネットワークなど不確かな箇所は try で囲む。

🐍 実際に動かしてみよう — try-except — その場で実行

上記の概念を実際にコードで実行してみてください。値を変えながら動作を自分の目で確認するのが、最も早い学習方法です。
✏️ Python 코드
📟 コンソール出力
▶ 実行ボタンを押してください
🐍 Pyodideで実際のPythonを実行 — 初回は読み込みに3〜5秒

🤖 AIへのリクエスト例

このレッスンの概念を身につければ、AIに具体的な指示を出せるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。

  • 「この broad except を具体的な例外クラスに絞り込んで」
  • 「この except ブロックで logging.exception を使ってスタックトレースをログに残すようにして」

なぜこれがトークンを削減するのか

概念を知らないままだと、AI の回答を受け取っても「それって何ですか?」と再度聞き直す必要があります。その「聞き直し」がトークンを消費します。概念を一度覚えておけば、会話が一度で完結します。

try-except — Python 例外処理 - Python