2

重複の可能性:
else の目的と最後に例外処理で

ステートメントにfinally条項が存在する理由を理解したいと思います。try/except私はそれが何をするかを理解していますが、それが言語の場所に値する場合、明らかに何かが欠けています。finally具体的には、節をフィールドに書くことと、try/exceptステートメントの外に書くことの違いは何ですか?

4

2 に答える 2

14

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

于 2012-07-30T13:49:15.820 に答える
2

句は常に実行されます。finallyこれは、コードで例外タイプを見逃した場合に最適です。

ドキュメントを引用するには:

最終的に存在する場合は、「クリーンアップ」ハンドラーを指定します。try句が実行され、except句とelse句が含まれます。いずれかの句で例外が発生し、処理されない場合、例外は一時的に保存されます。finally節が実行されます。保存された例外がある場合は、finally節の最後で再発生します。finally節で別の例外が発生するか、returnまたはbreakステートメントを実行すると、保存された例外は失われます。例外情報は、finally節の実行中はプログラムで使用できません。

于 2012-07-30T13:50:30.223 に答える