例外ハンドラで例外を発生させます。
try:
# do something that *might* raise an exception
except Exception:
raise
finally:
# something I *always* want to run
finally
スイートは、例外を再発生させたかどうかに関係なく、常に実行されます。
ドキュメントから:
が存在する場合finally
は、「クリーンアップ」ハンドラーを指定します。try
anyexcept
および句を含む句が実行されますelse
。いずれかの句で例外が発生し、処理されない場合、例外は一時的に保存されます。finally
句が実行されます。保存された例外がある場合は、finally
句の最後で再発生します。
finally
スイートがbreak
orreturn
ステートメントを使用する場合、保存された例外は破棄されることに注意してください。
句がreturnまたはbreakステートメントを実行する場合finally
、保存された例外は破棄されます。
def f():
try:
1/0
finally:
return 42
>>> f()
42
ただし、を発行した場合break
、continue
またはスイートreturn
でtry
、finally
スイートは引き続き実行されます。
...ステートメントのスイートで、return
またはbreak
ステートメントcontinue
が実行されると、その句も「途中で」実行されます。</ p>
try
try
finally
finally
Python 2.5より前では、同じステートメントでexcept
とfinally
スイートを組み合わせることさえできなかったことに注意してください。PEP 341:統一された試行/例外/最終をtry
参照してください。代わりに、ステートメントをネストすることが期待されていました。try
try:
try:
# some code that could raise an exception
except SomeException:
# exception handler
finally:
# cleanup code, always executed