コース一覧
    Pythonエラー・データ形式
    finallyとelse

    Pythonエラー・データ形式

    例外処理とデータ形式を深め、異なる入力を検証し変換する処理を設計できるようにします。

    1
    エラー処理の設計
    01. 例外の階層15分
    02. raiseで例外を投げる15分
    03. カスタム例外15分
    04. finallyとelse15分
    05. assertで前提を守る15分
    06. つくる 入力検証の例外設計20分
    07. 第5章クイズ10分
    2
    ファイルとデータ形式
    01. csvモジュール15分
    02. JSONで保存15分
    03. JSONを読み込む15分
    04. pathlibでパス操作15分
    05. 文字コード15分
    06. つくる JSON保存へ移行20分
    07. 第6章クイズ10分

    finallyとelse

    このレッスンでできるようになること。try に else と finally を足して、正常だったときだけの処理と、必ず行う後始末を書き分けられるようになります。

    try には except のほかに二つの節を付けられます。

    else は「try の中で例外が起きなかったとき」だけ動きます。成功したときのログや、次の処理へ進む部分をここへ置きます。try の中に書いてもよさそうですが、try は短いほど「どの行が失敗しうるか」がはっきりします。

    finally は「例外が起きても起きなくても」必ず動きます。開いたファイルを閉じる、接続を切るといった後始末の定位置です。途中で return しても finally は実行されるので、閉じ忘れが起きません。

    Python

    f = None
    try:
        f = open("kakeibo.txt", "w", encoding="utf-8")
        f.write("ノート 250\n")
    except ValueError as e:
        print("失敗しました", e)
    else:
        print("書き出しました")
    finally:
        if f is not None:
            f.close()

    節を並べる順番は try、except、else、finally と決まっています。入れ替えると文法エラーになります。家計簿の保存処理のように「失敗しても後始末は要る」場面では、この形が定番になります。

    要件

    1. lines が空のときは ValueError を投げて受け止め、失敗 保存するデータがありません を記録する
    2. 書き出せたときは else の節で 成功 件数 行を書き出しました を記録する
    3. finally の節で開いたファイルを閉じ、後始末を終えました を記録する
    4. 記録した文字列のリストを返す

    ヒント

    f = None を先に置いておくと finally で閉じたか判定できます

    open(path, "w", encoding="utf-8") で書き込み用に開きます

    節の順番は try / except / else / finally です

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

    関連レッスン

    • assertで前提を守る

      assert で集計前のデータが壊れていないことを検査します。

    • つくる 入力検証の例外設計

      入力の層で検証して投げ、上位で捕らえる形に整理します。

    • 第5章クイズ

      例外設計の理解を確認します。

    • csvモジュール

      手書きの split をやめて csv モジュールに載せ替えます。

    main.py
    エディタを読み込んでいます

    メモ

    finallyとelse

    ⌘S で保存