回答:
これは、現在実行中のメソッドが例外をスローする一方で、リソースを適切にクリーンアップできるようにする場合に役立ちます。以下は、呼び出しメソッドからの例外を処理する具体的な例です。
public void yourOtherMethod() {
try {
yourMethod();
} catch (YourException ex) {
// handle exception
}
}
public void yourMethod() throws YourException {
try {
db.store(mydata);
} finally {
db.cleanup();
}
}
catch
ブロックがない場合、スローfinally
された例外は、try
ブロック内の例外の前に実行されます。2つの例外があるので、もし1中try
との1 finally
スローされる唯一の例外は1つですfinally
。これらの言語では両方の例外が同時にスローされ、例外の順序がtry
最初であるので、この動作はPHPとPythonで同じではありませんfinally
。
なぜこのコードはこのようにするのですか?
どうやらコードはこのレベルで例外を処理する方法を知らないからです。それはいいですません。呼び出し元の1人が行う限り、つまり例外が最終的にどこかで処理される限りです。
多くの場合、ユーザーに通知する必要があるか、例外をログに記録する必要があるか、別の戦略を試す必要があるため、低レベルのコードは例外に適切に対応できません。低レベルのコードは1つを実行します機能のみを、高レベルの意思決定については認識しません。
ただし、コードは引き続きリソースをクリーンアップする必要があります(クリーンアップしないとリソースがリークするため)。そのため、finally
節でそれを実行し、例外がスローされたかどうかに関係なく、常に発生するようにします。
fopen
またはDB接続(PHPでも)に関して、他の応答が言及したようにクリーンアップを確実にします