大量の入力ファイルを反復処理して多くの解析と計算を行い、他のいくつかのファイルを出力する複雑なプログラムがあります。
void ParseFiles(string[] files, ProcessingDescription description) {
foreach(string file in files) {
try {
DoComplicatedProcessing(file, description);
}
catch(Exception e) {
LogFailure(file, e);
}
}
DisplayResult();
}
System.Exception
この場合にキャッチする理由は、解析/計算のバグ、入力ファイルの不正な値、必要なすべてのデータが収まると仮定した場合のメモリ不足エラーでさえも許可の問題など、さまざまな理由で失敗する可能性があるためです。メモリ内はfalseであることが判明しました。
しかし、結局、なぜ失敗したのかは気にしません。プログラムが特定のファイルで失敗した場合は、その失敗をログに記録して、次のファイルに進みます。
セッションの終わりに、ユーザーが戻ってきて、どのファイルが失敗し、どのエラーメッセージがスローされたかを確認できます。多くの場合、エラーメッセージはユーザーの役に立たないかもしれませんが、最初の不良ファイルでプログラムがクラッシュするよりはましです。
「System.Exceptionをキャッチしない」と聞き続けますが、これを行う他の方法は実際にはわかりません。