Python|finallyブロックとは?使い方を解説

1. はじめに

Pythonを学んでいると、例外処理の中でよく登場するのがtry-except構文です。この記事では、その中でも特に重要な役割を持つfinallyブロックについて解説します。

Python|finallyブロックとは?使い方を解説というテーマのもと、finallyがどのように動作するか、どんな場面で使うのか、具体的なコードと一緒に丁寧にご紹介します。

ファイル操作やリソースの解放など、確実に実行したい処理がある場合に、finallyは非常に役立ちます。この記事を読めば、例外処理の理解がより深まり、実務にも活かせるようになります。

 

2. finallyブロックの基本解説と使い方

finallyブロックとは?

finallyブロックは、tryexceptの後に記述できるコードブロックで、「例外の有無にかかわらず、必ず実行される処理」を定義するために使います。

たとえば、ファイルのクローズ処理やデータベース接続の解放など、どんな結果でも最後にやっておくべき処理に活用されます。

基本的な構文とコード例

try:
    print("処理を実行中...")
    result = 10 / 0  # 故意にエラーを発生させる
except ZeroDivisionError:
    print("ゼロ除算エラーが発生しました")
finally:
    print("finallyブロックは必ず実行されます")

実行結果:

処理を実行中...
ゼロ除算エラーが発生しました
finallyブロックは必ず実行されます

上記のコードでは、10 / 0 によって ZeroDivisionError が発生しますが、その後に続く finally ブロックは必ず実行されます。

 

3. finallyのよくある使い方・応用例

1. ファイル操作での使用

ファイルを開いたら、たとえエラーが起きても確実に閉じる処理が必要です。

try:
    file = open("sample.txt", "r")
    data = file.read()
    print(data)
except FileNotFoundError:
    print("ファイルが見つかりません")
finally:
    file.close()
    print("ファイルを閉じました")

実行結果:

ファイルが見つかりません
ファイルを閉じました

open()でファイルを開いた後、たとえファイルが存在しなかったとしても、finallyによってfile.close()が実行されます。

2. データベース接続の終了処理

以下は架空のデータベース接続処理の例です。

try:
    conn = connect_to_db()  # データベースに接続(仮)
    result = conn.query("SELECT * FROM users")  # クエリ実行(仮)
except Exception as e:
    print(f"エラーが発生しました: {e}")
finally:
    conn.close()
    print("データベース接続を閉じました")

データベース操作では、クエリが成功・失敗に関係なく接続を閉じる必要があるため、finallyが非常に有効です。

 

4. finallyブロックの注意点・エラー対策

1. finally内の処理もエラーを起こす可能性がある

finally内で行う処理もコードである以上、エラーが発生する可能性があります。たとえば、ファイルが開かれていない状態でfile.close()するとエラーになります。

try:
    file = None
    file.read()
except Exception:
    print("読み込みエラー")
finally:
    if file:  # Noneでないことを確認
        file.close()

このように、finallyブロックの中でも、変数の状態をチェックするなどの防御コードを書くことが大切です。

2. return文とfinallyの組み合わせ

tryexceptブロック内でreturnがあっても、finallyは実行されます。以下の例をご覧ください。

def sample():
    try:
        return "tryのreturn"
    finally:
        print("finallyが実行されました")

result = sample()
print(result)

実行結果:

finallyが実行されました
tryのreturn

finallyブロックはreturnよりも後に記述されていても優先して実行されることを覚えておきましょう。

 

5. まとめ

この記事では、Pythonのfinallyブロックについて基礎から応用、注意点まで解説しました。

  • finallyは「必ず実行される処理」を記述する場所
  • ファイル処理やDB接続などの「後片付け」に最適
  • 例外発生やreturnがあっても、finallyは実行される

実務でも、確実にリソースを開放したい場面は頻繁にあります。エラー処理の一歩先を行くテクニックとして、ぜひ覚えておきましょう。

独学でPythonを学んでいる方も、finallyの正しい理解がプログラムの堅牢性を高める第一歩になります。今後の学習や実装に、ぜひお役立てください。

タイトルとURLをコピーしました