1. はじめに
Pythonを学んでいると、例外処理の中でよく登場するのがtry-except
構文です。この記事では、その中でも特に重要な役割を持つfinally
ブロックについて解説します。
Python|finallyブロックとは?使い方を解説というテーマのもと、finally
がどのように動作するか、どんな場面で使うのか、具体的なコードと一緒に丁寧にご紹介します。
ファイル操作やリソースの解放など、確実に実行したい処理がある場合に、finally
は非常に役立ちます。この記事を読めば、例外処理の理解がより深まり、実務にも活かせるようになります。
2. finallyブロックの基本解説と使い方
finallyブロックとは?
finally
ブロックは、try
やexcept
の後に記述できるコードブロックで、「例外の有無にかかわらず、必ず実行される処理」を定義するために使います。
たとえば、ファイルのクローズ処理やデータベース接続の解放など、どんな結果でも最後にやっておくべき処理に活用されます。
基本的な構文とコード例
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の組み合わせ
try
やexcept
ブロック内で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
の正しい理解がプログラムの堅牢性を高める第一歩になります。今後の学習や実装に、ぜひお役立てください。