<一覧に戻る

finally節によるリソースの解放

Pythonでは、例外が発生した場合でも、リソースを適切に解放することが重要です。finally節は、例外の発生にかかわらず必ず実行されるコードブロックを定義するために使用されます。これにより、ファイル、ネットワーク接続、データベース接続などのリソースを安全に解放することができます。

finally節の基本構造

finally節は、tryブロックとexceptブロックの後に配置され、次のように構成されます。

try:
    # 処理を実行
except ExceptionType:
    # 例外処理
finally:
    # リソースの解放処理

サンプルコード

以下に、ファイルを読み込む際にfinally節を使用してリソースを解放する例を示します。

def read_file(file_name):
    file = None
    try:
        file = open(file_name, 'r')
        data = file.read()
        print(data)
    except FileNotFoundError:
        print(f"Error: {file_name} が見つかりません。")
    finally:
        if file is not None:
            file.close()
            print(f"{file_name} を閉じました。")

# 使用例
read_file('example.txt')

コード解説

  1. 関数定義: read_file関数は、引数としてファイル名を受け取ります。
  2. tryブロック:
  3. open関数を使ってファイルを開きます。この時、開いたファイルオブジェクトはfile変数に格納されます。
  4. readメソッドを使ってファイルの内容を読み込み、コンソールに出力します。
  5. exceptブロック:
  6. FileNotFoundError例外を捕捉し、ファイルが見つからない場合にエラーメッセージを表示します。
  7. finallyブロック:
  8. file変数がNoneでない場合、つまりファイルが正常にオープンされた場合には、closeメソッドを使ってファイルを閉じます。この処理は、例外が発生した場合でも必ず実行されます。

実行結果

例えば、example.txtというファイルが存在する場合、実行結果は以下のようになります。

<ファイルの内容>
example.txt を閉じました。

もしexample.txtが存在しない場合、実行結果は次のようになります。

Error: example.txt が見つかりません。
example.txt を閉じました。

まとめ

finally節を使用することで、エラーが発生した場合でもリソースを適切に解放することができます。これにより、メモリリークやファイルのロックなどの問題を防ぐことができ、プログラムの安定性が向上します。例外処理を行う際は、必ずfinally節を活用してリソースの管理を行いましょう。

出力結果: