Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
生徒
「Pythonでエラーが起きたときにも必ず実行される処理ってあるんですか?プログラムが途中で止まると困ってしまいます。」
先生
「ありますよ。そのために使うのがfinally文です。例外が発生しても発生しなくても、最後に必ず実行される場所を作れる仕組みなんです。」
生徒
「必ず実行されるというのは便利ですね。どういうときに使うんですか?」
先生
「たとえばファイルを閉じたり、接続を切ったり、片付け作業を行いたいときに使うんです。実際の書き方を一緒に見ていきましょう。」
1. finally文とは?
Pythonのfinally文は、例外処理で使われる構文のひとつで、tryブロックの後に書くことで、エラーが起きても起きなくても必ず実行される部分を定義できます。これは「後片付け」や「必ず実行してほしい作業」を記述するのに最適な場所です。
たとえば、家で料理をするときに、途中で失敗しても台所の片付けは必ず必要ですよね。それと同じで、Pythonでもエラーが起きても最後にどうしても行いたい処理が存在します。その処理を書くのがfinallyです。
2. 基本的なfinally文の書き方
まずはPythonのtry-except-finally構文の基本の形を見てみましょう。基本的にはtryでエラーが起きるかもしれない処理を書き、exceptで例外を受け取り、finallyで必ず実行する処理を書きます。
try:
value = int("abc")
except Exception as e:
print("エラーが発生しました")
finally:
print("最後に必ず実行される処理です")
このコードでは、文字列を数値に変換しようとしてエラーが発生しますが、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. ネットワーク接続やデータベース接続でも必須
ファイル処理に限らず、ネットワーク通信やデータベース接続などの「開いたら閉じる必要がある処理」ではfinallyが特に重要です。接続を閉じ忘れるとプログラムが重くなったり、通信エラーが出たり、他のユーザーに影響を与えたりします。
初心者のうちは実感しにくいかもしれませんが、プログラムは「開きっぱなしの状態」がトラブルのもとになります。そのため、後片付けを確実に行うfinallyは非常に大切です。
5. finallyだけを使う書き方も可能
実はtry-finallyだけで書くこともできます。例外をキャッチして処理したいわけではなく、最後に必ず実行したいだけのときに使えます。
try:
print("処理を実行中")
finally:
print("必ず実行されます")
このように、exceptを省略しても問題ありません。とにかく「最後に何かしてほしい」というときに便利な使い方です。
6. finallyはreturnよりも優先して実行される
Pythonのfinallyはとても強力で、なんと関数内のreturnよりも優先されます。つまり、関数が終了しようとしても、finallyが先に実行されます。
def sample():
try:
return "tryのreturn"
finally:
print("finallyが先に実行されます")
print(sample())
実行すると、まずfinallyのメッセージが表示され、その後にreturnの値が返されます。この性質を理解しておくと、処理の流れが読みやすくなるので覚えておくと役に立ちます。
7. 初心者がfinallyを使う際に意識すべきポイント
初心者のうちは、エラーが出るとプログラムが止まってしまい不安に感じることが多いと思います。しかしfinallyを使えば、たとえ途中でエラーが起きても必ず後処理が行われるため、安心してコードを書くことができます。
また、プログラムが複雑になるほど「必ず実行したい処理」が増えるため、finallyの重要性はどんどん高くなります。安全にプログラムを書けるようになるために、try-except-finally構文はPythonの初心者が最初に身につけておきたい基本スキルのひとつです。