カテゴリ: Python 更新日: 2026/02/17

Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方

Pythonのfinally文の使い方!例外発生時にも実行する処理
Pythonのfinally文の使い方!例外発生時にも実行する処理

先生と生徒の会話形式で理解しよう

生徒

「Pythonでエラーが起きたときにも必ず実行される処理ってあるんですか?プログラムが途中で止まると困ってしまいます。」

先生

「ありますよ。そのために使うのがfinally文です。例外が発生しても発生しなくても、最後に必ず実行される場所を作れる仕組みなんです。」

生徒

「必ず実行されるというのは便利ですね。どういうときに使うんですか?」

先生

「たとえばファイルを閉じたり、接続を切ったり、片付け作業を行いたいときに使うんです。実際の書き方を一緒に見ていきましょう。」

1. finally文とは?例外処理の「最後の砦」を理解しよう

1. finally文とは?例外処理の「最後の砦」を理解しよう
1. finally文とは?例外処理の「最後の砦」を理解しよう

Pythonのfinally文は、例外処理(エラー対策)において「何があっても、最後に必ず実行される処理」を記述するための構文です。tryブロックの中でエラー(例外)が発生した場合はもちろん、エラーが全く起きずに正常に処理が終了した場合でも、finallyに書いたコードは漏れなく実行されます。

プログラミング未経験の方には、「キャンプの片付け」をイメージすると分かりやすいでしょう。料理が上手くいっても(正常終了)、途中で雨が降って中止になっても(エラー発生)、借りた道具を返したりゴミを拾ったりする「後片付け」は絶対に必要ですよね。Pythonにおけるfinallyは、まさにその「後片付け」を担当する大切な役割を持っています。

まずは、非常にシンプルな例で動きを確認してみましょう。例えば、数字を扱うプログラムで考えてみます。


try:
    print("--- 処理を開始します ---")
    # ここでエラーが起きる可能性があります
    result = 10 / 2
    print(f"計算結果は {result} です")
except:
    print("エラーが発生しました!")
finally:
    # エラーの有無に関わらず、必ず実行されます
    print("--- すべての工程が終了しました(後片付け) ---")

このコードを動かすと、計算が成功しても、仮に「10 / 0」のようにエラーが起きる計算に変えても、一番最後のメッセージは必ず表示されます。このように、プログラムの実行状態をクリーンに保つための「終了の合図」や「リソースの解放」を記述する場所がfinallyなのです。この仕組みがあるおかげで、予期せぬトラブルでプログラムが止まっても、システム全体が不安定になるのを防ぐことができます。

2. 基本的なfinally文の書き方

2. 基本的なfinally文の書き方
2. 基本的なfinally文の書き方

まずはPythonのtry-except-finally構文の基本の形を見てみましょう。基本的にはtryでエラーが起きるかもしれない処理を書き、exceptで例外を受け取り、finallyで必ず実行する処理を書きます。


try:
    value = int("abc")
except Exception as e:
    print("エラーが発生しました")
finally:
    print("最後に必ず実行される処理です")

このコードでは、文字列を数値に変換しようとしてエラーが発生しますが、finallyは必ず実行されます。例外の有無に関係なく動くので、終了処理を書く場所としてとても便利です。

3. ファイル処理でのfinallyの活用例

3. ファイル処理でのfinallyの活用例
3. ファイル処理でのfinallyの活用例

初心者にとって一番わかりやすいfinallyの使い方は、ファイル処理です。ファイルを開いたら、必ず閉じなければなりません。しかしプログラムの途中でエラーが発生すると、閉じる前に止まってしまいます。そのようなトラブルを防ぐためにfinallyを使います。


try:
    f = open("sample.txt", "r")
    data = f.read()
    print(data)
except Exception as e:
    print("読み込み中にエラーが発生しました")
finally:
    f.close()
    print("ファイルを閉じました")

このようにfinallyにファイルの後処理を書けば、エラーが起きてもファイルは確実に閉じられます。これは実際の開発でも非常によく使われるテクニックです。

4. ネットワーク接続やデータベース接続でも必須

4. ネットワーク接続やデータベース接続でも必須
4. ネットワーク接続やデータベース接続でも必須

ファイル処理に限らず、ネットワーク通信やデータベース接続などの「開いたら閉じる必要がある処理」ではfinallyが特に重要です。接続を閉じ忘れるとプログラムが重くなったり、通信エラーが出たり、他のユーザーに影響を与えたりします。

初心者のうちは実感しにくいかもしれませんが、プログラムは「開きっぱなしの状態」がトラブルのもとになります。そのため、後片付けを確実に行うfinallyは非常に大切です。

5. finallyだけを使う書き方も可能

5. finallyだけを使う書き方も可能
5. finallyだけを使う書き方も可能

実はtry-finallyだけで書くこともできます。例外をキャッチして処理したいわけではなく、最後に必ず実行したいだけのときに使えます。


try:
    print("処理を実行中")
finally:
    print("必ず実行されます")

このように、exceptを省略しても問題ありません。とにかく「最後に何かしてほしい」というときに便利な使い方です。

6. finallyはreturnよりも優先して実行される

6. finallyはreturnよりも優先して実行される
6. finallyはreturnよりも優先して実行される

Pythonのfinallyはとても強力で、なんと関数内のreturnよりも優先されます。つまり、関数が終了しようとしても、finallyが先に実行されます。


def sample():
    try:
        return "tryのreturn"
    finally:
        print("finallyが先に実行されます")

print(sample())

実行すると、まずfinallyのメッセージが表示され、その後にreturnの値が返されます。この性質を理解しておくと、処理の流れが読みやすくなるので覚えておくと役に立ちます。

7. 初心者がfinallyを使う際に意識すべきポイント

7. 初心者がfinallyを使う際に意識すべきポイント
7. 初心者がfinallyを使う際に意識すべきポイント

初心者のうちは、エラーが出るとプログラムが止まってしまい不安に感じることが多いと思います。しかしfinallyを使えば、たとえ途中でエラーが起きても必ず後処理が行われるため、安心してコードを書くことができます。

また、プログラムが複雑になるほど「必ず実行したい処理」が増えるため、finallyの重要性はどんどん高くなります。安全にプログラムを書けるようになるために、try-except-finally構文はPythonの初心者が最初に身につけておきたい基本スキルのひとつです。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonの定数を定義する方法!慣習とモジュールを活用した書き方
New2
Python
Pythonのカプセル化とは?private変数とプロパティの活用方法をやさしく解説
New3
Python
Pythonの継承とは?親クラス・子クラスの関係とメソッドオーバーライドをやさしく解説
New4
Python
Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.7
Java&Spring記事人気No7
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.8
Java&Spring記事人気No8
Python
Pythonのライブラリとは?標準ライブラリとサードパーティライブラリの違いを初心者向けに解説!