Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのtry-finally句で例外処理を行う方法とは?基本と実例をわかりやすく解説

try-finally句とは?

これまで、Pythonのtry文といえばexcept節と組み合わせて使うのが一般的でした。しかし、try文にはもうひとつ重要な使い方があります。それがfinally節との組み合わせです。

finally節は「クリーンアップ節」や「終了処理節」とも呼ばれ、tryブロック内で例外が発生したかどうかにかかわらず、必ず実行されるという大きな特徴を持っています。この仕組みを活用することで、ファイルのクローズやデータベース接続の切断など、リソースの後始末処理を確実に行うことができます。

finally節を使用する際のポイント

  • 1つのtryブロックに対して、「except」と「finally」は同時に定義できません。どちらか一方のみを指定します。
    ※なお、Python 2.5以降では try-except-finally のように両方を組み合わせた記述が可能になっています。
  • 「else」節と「finally」節の併用は避けるのが望ましいとされています。
  • tryブロック内で例外が発生した場合でも、finally節は例外が呼び出し元へ伝播する前に必ず実行されます。

サンプルコード

以下は、try-finallyを使った基本的な例です。ファイルを開いて書き込みを行い、その後、例外の有無にかかわらずファイルを確実に閉じています。

try:
    foo = open('test.txt', 'w')
    foo.write("It's a test file to verify try-finally in exception handling!!")
    print('tryブロックが実行されました')
finally:
    foo.close()
    print('finallyブロックが実行されました')

実行結果

tryブロックが実行されました
finallyブロックが実行されました

この例では、tryブロック内で例外が発生しなかったため、通常どおり「tryブロック → finallyブロック」の順に処理が進んでいます。もしtryブロック内で例外が発生した場合でも、finallyブロックは必ず実行されたうえで、例外が呼び出し元へ伝播します。つまり、どんな状況でもファイルのクローズ漏れを防げるのです。

補足:with文というより簡潔な選択肢

なお、ファイル操作のようなリソース管理では、with文(コンテキストマネージャ)を使うと、finally節を明示的に書かなくてもブロックを抜けた時点で自動的に後始末が行われるため、より簡潔で安全なコードになります。

with open('test.txt', 'w') as foo:
    foo.write("It's a test file to verify try-finally in exception handling!!")
print('ファイルは自動的にクローズされました')

用途に応じてtry-finallyとwith文を使い分けることで、堅牢で読みやすいPythonコードを書くことができます。

  1. Javaのランタイム例外(RuntimeException)とは?主な種類と対処法を解説

    ランタイム例外(RuntimeException)とは ランタイム例外(RuntimeException)は、Javaプログラミング言語における各種例外の親クラスであり、発生するとプログラムやアプリケーションがクラッシュ、あるいは異常終了する可能性のある例外群を指します。 チェック例外(検査例外)と異なり、ランタイム例外はコンパイル時のチェック対象外です。そのため、try-catchでの捕捉やthrows宣言が必須ではなく、実行時に初めて表面化することが少なくありません。 ランタイム例外は通常、プログラムが本来対処すべき外部要因ではなく、プログラマーのコーディングミスを示している点が大きな特徴

  2. PythonのTkinterでウィンドウのタイトルバーを編集・カスタマイズする方法

    Tkinterでは、プログラムを実行するとウィンドウやフレームが画面に表示されます。Tkinterの関数やモジュールはそれぞれ独立して構成されているため、特定の関数を使ってウィンドウの属性を柔軟にカスタマイズすることが可能です。Tkinterは、アプリケーションごとにデフォルトのルートウィンドウを自動的に作成します。このデフォルトのタイトルを変更・編集したい場合は、以下のメソッドを使用します。title(text= 任意のタイトル)それでは、実際にTkinterフレームのオブジェクトを生成してウィンドウを作成し、そのタイトルを編集してみましょう。サンプルコード# ライブラリをインポート fro