Pythonのtry-finally文とは?使い方と例外発生時の動作を解説
Pythonでは、finallyブロックをtryブロックと組み合わせて使用できます。finallyブロックは、tryブロック内で例外が発生したかどうかにかかわらず、必ず実行したいコードを記述するための場所です。ファイルのクローズやリソースの解放など、後処理を確実に行いたい場合に非常に役立ちます。
try-finally文の構文
try:
# ここに通常の処理を記述します
......................
# 例外が発生した場合、以降の処理はスキップされます
finally:
# このブロックは必ず実行されます
......................
なお、finally句はelse句と同時に使用することはできません。この点は覚えておきましょう。
基本的な例
#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
finally:
print("Error: can't find file or read data")
出力結果
書き込みモードでファイルを開く権限がない場合、次のような結果が出力されます。
Error: can't find file or read data
より洗練された書き方
同じ処理でも、try-finallyをネストさせて使うことで、より明確で安全なコードになります。
例
#!/usr/bin/python
try:
fh = open("testfile", "w")
try:
fh.write("This is my test file for exception handling!!")
finally:
print("Going to close the file")
fh.close()
except IOError:
print("Error: can't find file or read data")
例外発生時の実行の流れ
tryブロック内で例外がスローされると、プログラムの実行は直ちにfinallyブロックへ移ります。そして、finallyブロック内のすべてのステートメントが実行された後、例外は再度送出され、より外側の階層にtry-except文が存在すれば、そのexcept節によって処理されます。
この仕組みのおかげで、例外が発生してもファイルを確実にクローズできるなど、リソース管理を安全に行えます。なお、現代のPythonでは、同様の目的に対してwith文(コンテキストマネージャ)を使う方法も推奨されているので、あわせて覚えておくと良いでしょう。
-
Pythonのファイルオブジェクトとは?open関数によるファイル操作の基本を徹底解説
Pythonでは、ファイルを読み書きする際に特別なライブラリをインポートする必要はありません。ファイル操作は言語にネイティブに組み込まれているためです。 まず最初に行うのは、組み込み関数 open() を使ってファイルオブジェクトを取得することです。open() 関数はファイルを開き、ファイルオブジェクトを返します。このファイルオブジェクトには、開いたファイルから情報を取得したり、内容を操作したりするためのメソッドや属性が含まれています。 ファイルとは何か? ファイル操作を行う前に、「ファイルとは何か」を理解しておきましょう。ファイルとは、関連する情報を保存するためにディスク上に確保された「名
-
Pythonで例外を指定しない「except句」の使い方と注意点
Pythonでは、except句に例外を何も指定しないことで、すべての種類の例外を捕捉することができます。しかし、これは良いコーディング手法とは言えず、実際の開発現場では推奨されていません。 記述例 try: print(foo + qux + 7) except: print(エラーが発生しました) 出力結果 エラーが発生しました このように例外を指定しない try-except ブロックは、あらゆる種類の例外を処理できる一方で、どの種類の例外が発生したのかを特定できないという大きな欠点があります。そのため、プログラマがエラーの原因を突き止める際の助けにはなりません。 なぜ推