Pythonのfinallyキーワード徹底解説!例外の有無にかかわらず必ず実行されるブロック
どのようなプログラミング言語でも、プログラムの実行中に例外(エラー)が発生する場面に遭遇します。Pythonには数多くの組み込み例外処理の仕組みが用意されており、発生したエラーの種類に応じて適切な例外名を使って対処できます。さらにPythonにはfinallyという特別なブロックがあり、ここに記述したコードは、例外が処理されたかどうかにかかわらず必ず実行されるという特徴を持っています。
基本構文
finallyキーワードは、try文と組み合わせて使用します。基本的な構文は以下の通りです。
try: # メインのPythonコード except: # このブロックは省略可能 # 例外を処理するコード finally: # 常に実行されるコード
コード例
次のコードでは、NameErrorという例外が発生します。宣言されていない変数を参照するコードを書いた場合です。例外がexceptブロックで適切に処理されていても、その後のfinallyブロックも実行され、そこに記述されたコードが出力されます。
try:
var1 = 'Tutorials'
# NameError が発生する
print(var2)
# 例外を処理する
except NameError:
print("variable is not found in local or global scope.")
finally:
# 例外の発生有無にかかわらず、
# このブロックは常に実行される
print('finally block code here')実行結果
上記のコードを実行すると、次のような結果が得られます。
variable is not found in local or global scope. finally block code here
このように、exceptブロックでNameErrorが捕捉・処理された後も、finallyブロック内のメッセージが出力されていることが確認できます。
例外処理を行わない場合
今度は、あえて例外を処理しないコードを書いてみましょう。exceptブロックを省略しても、finallyブロックは例外が未処理のままでも実行されます。
コード例
try:
var1 = 'Tutorials'
# NameError が発生する
print(var2)
# 例外処理なし
finally:
# 例外の発生有無にかかわらず、
# このブロックは常に実行される
print('finally block code here')実行結果
上記のコードを実行すると、次のような結果が得られます。
finally block code here Traceback (most recent call last): File "xxx.py", line 4, in print(var2) NameError: name 'var2' is not defined
出力を見ると、まずfinallyブロックのメッセージが表示され、その後にNameErrorのトレースバックが出力されています。つまり、例外が処理されずプログラムが異常終了する場合でも、finallyブロックは確実に実行されるのです。
まとめ
finallyブロックは、ファイルのクローズやリソースの解放など、「成功・失敗に関わらず必ず行いたい後処理」を記述するのに最適です。try-exceptによる例外処理の有無に関係なく動作が保証されるため、堅牢なPythonプログラムを書くうえで非常に重要なキーワードといえます。
-
Pythonの数学演算子徹底ガイド:基本から使い方まで
どんなアプリを開発する場合でも、コードの中で数値を扱う場面は必ずと言っていいほど登場します。レストラン向けアプリでメニューの価格を保存したり、両替アプリで異なる通貨間の換算を行ったりするのもその一例です。 Pythonを学び始めたばかりの方からよく寄せられる質問の一つが、「コード内の数値に対して数学的な操作を行うにはどうすればよいのか」というものです。このチュートリアルでは、その疑問にお答えします。Pythonの数学演算子の基礎を丁寧に解説し、読み終える頃には組み込みの数学演算子を使いこなせるようになっているはずです。 演算子とは? Pythonの数学演算子の使い方を説明する前に、まず「
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し