例は 1000 語に値します。なぜ、自分が書いたものを試してみなかったのですか?
>>> def foo():
>>> try:
>>> print "2 try block"
>>> raise Exception("1")
>>> print "never printed"
>>> except:
>>> print "3 first except block"
>>> raise Exception("2")
>>> finally:
>>> print "4 finally block"
>>> print "end of function"
>>>
>>> try:
>>> print "1 before foo"
>>> foo()
>>> print "never printed too"
>>> except:
>>> print "5 outter except clause"
1 before foo
2 try block
3 first except block
4 finally block
5 outter except clause
新しい例外が発生する前ですか、それとも新しい例外がメソッド スタックを介して伝播された後ですか?
例からわかるように、finally ブロックは、それが定義されている except ブロックの後 (つまり、try
/ except
/ブロックを離れた後) に呼び出されますが、外側の/ブロックfinally
に到達する前に呼び出されます。try
except
これは論理的であり、ブロックを終了するときに常に最終的にトリガーされるtry
ようにする必要があるため、ステートメントの外でコードを実行するときにコード環境が一貫していることを確認できますtry
(リソースを解放するか、リセットするか)値、またはロールバック/変更のコミット...)。