INDEX
finallyの概要
例外処理後の必須実行処理 Python予約語 | ||
finally 概要 わかりやすく説明 |
||
|
finallyの基本的な使い方
以下の例では、例外の有無に関わらず finally
ブロックの処理が実行されることを示しています。
# finally の基本
try:
print("処理を開始")
result = 10 / 2 # 例外なし
except ZeroDivisionError:
print("ゼロ除算エラー発生")
finally:
print("処理終了(必ず実行)")
10 / 2
は正常に実行され、エラーは発生しません。finally
ブロックの「処理終了(必ず実行)」が実行されます。
exceptと組み合わせたfinallyの使用
例外が発生した場合でも、finally
の処理が実行されることを確認します。
# except と finally の組み合わせ
try:
result = 10 / 0 # ゼロ除算エラー発生
except ZeroDivisionError:
print("ゼロで割ることはできません")
finally:
print("プログラム終了(必ず実行)")
10 / 0
でZeroDivisionError
が発生。except
ブロックの「ゼロで割ることはできません」が実行される。finally
の「プログラム終了(必ず実行)」が実行される。
finallyを使ったファイル処理
ファイルを開いた後、エラーの有無に関係なく必ずファイルを閉じる例を示します。
# finally を使ったファイル処理
try:
file = open("sample.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません")
finally:
if 'file' in locals():
file.close()
print("ファイルを閉じました")
- ファイルが存在しない場合、
FileNotFoundError
が発生。 - エラーの有無にかかわらず
finally
でfile.close()
が実行される。
finallyを使ったデータベース処理
データベース接続を開いた後、エラーの有無に関わらず確実に接続を閉じる例です。
# finally を使ったデータベース処理
import sqlite3
try:
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
print(data)
except Exception as e:
print(f"エラー発生: {e}")
finally:
if 'conn' in locals():
conn.close()
print("データベース接続を閉じました")
- データベース操作中にエラーが発生しても、
finally
で接続が確実に閉じられる。
finallyの注意点
- finally は必ず実行される: 例外が発生しても、発生しなくても実行されます。
- return の前に実行される:
try
内でreturn
しても、finally
は実行されます。 - リソース管理に役立つ: ファイルやデータベース接続のクローズ処理に便利です。
finallyのよくある質問
- Q: finally はなくても大丈夫ですか?
- A: はい。ただし、ファイルやデータベース接続の解放が保証されなくなるため、明示的に使うのが安全です。
- Q: finally の中で return を使うとどうなりますか?
- A:
finally
内のreturn
は最優先され、try
ブロック内のreturn
を上書きします。 - Q: finally を使わずにリソースを解放する方法は?
- A:
with
構文を使うと、finally
なしで安全にリソースを管理できます(例:with open("file.txt", "r") as f:
)。
まとめ
finally
は、例外の有無にかかわらず、処理の最後に必ず実行されるコードを定義するためのキーワードです。
- エラーが発生しても
finally
は必ず実行されます。 - ファイルやデータベース接続の後処理に便利です。
return
があってもfinally
は実行されます。
適切に finally
を活用し、プログラムの安定性を向上させましょう。