コース一覧
    Pythonファイル・エラー・制作
    例外の種類

    Pythonファイル・エラー・制作

    ファイル操作と例外処理を学び、入出力を含む小さなPython制作を安全に進められるようにします。

    1
    ファイルとエラー処理
    01. ファイルを読み込む15分
    02. ファイルに書き込む15分
    03. withで安全に扱う15分
    04. CSV形式で保存15分
    05. try-exceptで備える15分
    06. 例外の種類15分
    07. つくる:保存機能15分
    08. 第8章クイズ10分
    2
    総合制作
    01. 全機能を統合しよう15分
    02. 月間レポート機能15分
    03. 自由拡張15分
    04. 完成と次のステップ10分

    例外の種類

    例外は種類ごとに原因が違う

    いちばん最初の起動では、まだファイルが無い

    保存機能を入れたら、起動時にまず保存ファイルを読み込みたくなります。ところが 1 回目の起動では、そのファイルはまだ存在しません。

    Python

    with open("kakeibo.csv", "r", encoding="utf-8") as f:
        text = f.read()

    この行は FileNotFoundError で止まります。メッセージは No such file or directory で、探しにいったパスまで教えてくれます。前回の ValueError とは別の名前です。例外の名前は、何が起きたのかを説明する短いラベルになっていて、読めば直し方の見当が付きます。

    ここで欲しい動きは「無いなら、0 件として始める」です。止めるのではなく、既定の値を用意して先へ進みます。

    Python

    try:
        with open("settings.txt", "r", encoding="utf-8") as f:
            theme = f.read()
    except FileNotFoundError:
        theme = "light"

    設定ファイルがあればその中身を、無ければ既定の "light" を使う形です。try の中に with を丸ごと入れているのがポイントです。例外が起きるのは open の時点なので、open が try の中に入っていなければ受け止められません。with の外側だけを囲んでも意味がありません。

    広く捕まえるほど、壊れ方に気づけなくなる

    except Exception と書けば、ほとんどの例外を一手に受け止められます。楽に見えますが、これは避けます。

    たとえばパスを書き間違えてディレクトリを指してしまうと、起きるのは IsADirectoryError です。これを「ファイルが無い」と同じ扱いにして空の結果を返すと、設定ミスに気づけないまま、記録が消えたように見えます。

    受け止める種類を絞っておけば、想定していない例外はそのまま表に出ます。表に出れば直せます。広く捕まえるほどプログラムは静かになりますが、静かなプログラムは壊れていても気づけません。

    種類を取り違えるのもよくある失敗です。except ValueError では FileNotFoundError を受け止められず、例外はそのまま素通りして止まります。受け止めたあとに return を書き忘れるのも定番で、関数は None を返し、呼び出した側が for で回した瞬間に別のエラーになります。空リストと None は別ものです。

    やってみよう

    関数 load_or_empty(path, initial_text=None) を実装してください。initial_text が None でなければ、まず path にその内容を書き出します。そのうえで path を読み込み、splitlines で行のリストにして返します。

    ファイルが存在しないときは FileNotFoundError を受け止めて空リスト [] を返します。受け止める種類はこれだけにして、except Exception のような広い書き方は使わないでください。

    省略されたかどうかの判定には initial_text is not None を使います。空文字も「渡された」として扱いたいので、if initial_text: と書くと空文字が省略と同じ扱いになってしまいます。

    要件

    1. 関数名は load_or_empty で、引数は path と initial_text の 2 つ。initial_text の既定値は None
    2. initial_text が None でなければ、先に path へ書き出す
    3. 読み込みは try で囲み、splitlines で行のリストにして返す
    4. except FileNotFoundError で受け止めて空リストを返す
    5. except Exception のように広く捕まえる書き方はしない

    ヒント

    省略されたかどうかは initial_text is not None で判定します

    書き出しは with open(path, "w", encoding="utf-8") as f: の中で write します

    try の中に with open(path, "r", ...) を丸ごと入れます

    except FileNotFoundError: の中では return [] と書きます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • つくる:保存機能

      第8章の総仕上げ。記録をファイルに保存し、読み戻して辞書のリストに復元する

    • 第8章クイズ

      ファイルのモード、with、CSV の型の往復、except の捕捉範囲を5問で確認する

    • 全機能を統合しよう

      各章で作った部品を1本にまとめ、コマンド列を順に処理する run_kakeibo を作る

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • ディレクトリファイルを整理するフォルダのこと。
    • 関数処理に名前を付けて再利用できる単位
    • リスト順序付きで複数の値を扱うデータ構造
    • 引数位置引数=順番で渡す。
    • None「値がない」ことを表す特別な値。
    main.py
    エディタを読み込んでいます

    メモ

    例外の種類

    ⌘S で保存