重複の可能性:
else の目的と最後に例外処理で
ステートメントにfinally条項が存在する理由を理解したいと思います。try/except私はそれが何をするかを理解していますが、それが言語の場所に値する場合、明らかに何かが欠けています。finally具体的には、節をフィールドに書くことと、try/exceptステートメントの外に書くことの違いは何ですか?
重複の可能性:
else の目的と最後に例外処理で
ステートメントにfinally条項が存在する理由を理解したいと思います。try/except私はそれが何をするかを理解していますが、それが言語の場所に値する場合、明らかに何かが欠けています。finally具体的には、節をフィールドに書くことと、try/exceptステートメントの外に書くことの違いは何ですか?
finallyスイートで何が起こっても、スイートは実行されることが保証さtryれています。
ファイル、データベース接続などをクリーンアップするために使用します。
try:
file = open('frobnaz.txt', 'w')
raise ValueError
finally:
file.close()
os.path.remove('frobnaz.txt')
これは、例外ハンドラー(exceptスイート)が例外をキャッチするかどうか、またはreturnコードにステートメントがあるかどうかに関係なく当てはまります。
def foobar():
try:
return
finally:
print "finally is executed before we return!"
tryループで/ステートメントを使用してから、またはのいずれかを使用finallyしてループから抜け出し、スイートを実行します。すべての場合に実行されることが保証されています。continuebreakfinally
句は常に実行されます。finallyこれは、コードで例外タイプを見逃した場合に最適です。
ドキュメントを引用するには:
最終的に存在する場合は、「クリーンアップ」ハンドラーを指定します。try句が実行され、except句とelse句が含まれます。いずれかの句で例外が発生し、処理されない場合、例外は一時的に保存されます。finally節が実行されます。保存された例外がある場合は、finally節の最後で再発生します。finally節で別の例外が発生するか、returnまたはbreakステートメントを実行すると、保存された例外は失われます。例外情報は、finally節の実行中はプログラムで使用できません。