カテゴリ: Python 更新日: 2026/03/31

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でfinallyを使用する際は、try(やってみる)、except(エラーが起きたら)、finally(最後に必ず)という3つのブロックをセットで考えるのが基本です。この構文を使うことで、予期せぬエラーでプログラムが強制終了しそうな場面でも、安全に処理を締めくくることができます。

まずは、プログラミング未経験の方でもイメージしやすい「文字列を数値に変換する」という具体例で、実際の書き方と動作を確認してみましょう。


try:
    # 1. まずはこの処理を実行(エラーが起きる可能性があるもの)
    print("データの変換を試みます...")
    number = int("Python")  # 文字列を数字にしようとしてエラーが発生!
    print(f"変換結果: {number}")

except Exception as e:
    # 2. エラーが発生した場合にここが実行される
    print(f"【エラー発生】数字以外のものは変換できません(理由: {e})")

finally:
    # 3. 成功しても失敗しても、最後に必ず実行される
    print("--- 変換処理の試行が完了しました(終了処理) ---")

このプログラムを実行すると、int("Python")の行で「文字を数字にはできないよ!」というエラーが発生します。そのため、直後のprint(f"変換結果...")は飛ばされてexceptブロックへ移動しますが、どんな状況になっても最後のfinallyブロックだけはスキップされずに実行されます。

この「何があっても通る道」があることで、画面に終了メッセージを出したり、使い終わったメモリを整理したりといった、プログラムの整合性を保つための重要な操作を確実に実行できるのです。例外処理の基本形として、この3ステップの形を覚えておきましょう。

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でREST APIを作る方法!初心者向けFastAPI入門|Python API開発の基本
New2
PHP
PHPのコード品質向上ツール完全解説!PHPStan(ピーエイチピースタン)とPHPCS(ピーエイチピーシーエス)で初心者でも安全にデバッグしよう
New3
Python
Pythonでデータベースのログを記録・監視する方法を完全解説!初心者向けデータベースログ管理入門
New4
PHP
PHPのログファイルを活用したエラートラッキング完全ガイド|初心者でもわかるPHPデバッグ入門
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
Pythonのインストール&環境構築!Windows・Mac・Linuxでの手順を初心者向けに解説
No.3
Java&Spring記事人気No3
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.6
Java&Spring記事人気No6
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
No.8
Java&Spring記事人気No8
PHP
PHPのPHPUnitを使った単体テスト完全ガイド!初心者でもわかるテストとデバッグ入門