-1

一部のアプリケーションでは、意図的に例外を消費するコード行に出くわしました。私のアプリケーションでは、これを行う利点は - 例外を無視してループを続行することです (処理される例外は、ループ内でスローされたエラーに対するものです)。次のコード行は、経験豊富な開発者にさえ悪いように見えます。しかし、コンテキストには賢明です(つまり、ディレクトリ内のすべてのファイルを処理するという要件です)。

try{
    //some lines of code which might throw exception
}catch(Exception e){
    //no code to handle the error thrown
}

例外を無視すると、他にどのような利点がありますか?

4

4 に答える 4

3

すべてのファイルを処理することが要件である場合、そのうちの 1 つの処理中に例外が発生した場合、要件は既に​​破られていませんか? 何かが失敗したか、例外は必要ありません。

処理を続行する場合は、例外を処理してから続行します。特定のファイルの処理に関する問題を報告して、後で誰かが手動で処理できるようにしないのはなぜですか? おそらく愚かでさえcerr << "Hey I had trouble with this file '" << file <<', so I skipped it.\n"、何もないよりはましでしょう。

何かを知らせるために例外があります。それを無視している場合は、何か厄介なことをしている、または例外は必要ありません。

私が考えることができる例外を無視する唯一の正当な理由は、正当な理由もなく誰かがあなたに例外をスローしたときです。たぶん、ええ、無視します。

于 2013-07-11T09:35:24.707 に答える
1

例外を無視するメリットはないと思います。問題が発生するだけです。コードをループで実行する場合は、処理後に例外が処理されるため、ループを続行します。例外処理後に何もしていなくても、ディレクトリ内のファイルはいつでも処理できます。

例外がスローされたファイルに関するログを作成するとよいでしょう。

例外を食べる場合。問題の実際の原因が何であるかわからない場合があります。この例を検討してください

public class Test {

    private int x;

    public void someMethod(){

        try {
             x = 10/0;
        } catch (Exception e) {

        }
    }
    public static void main(String[] args) {
        Test test = new Test();
        test.someMethod();
        System.out.println(test.x);
    }

}

これは、除算中に例外が発生し、値が割り当てられなかったため、単に0x のデフォルト値を出力しますx

ここでは、除算の実際の結果を取得することになっています。ArithMeticExceptionゼロで除算していて、catch ブロックに何も記述していないため、間違いなく がスローされます。したがって、例外が発生した場合、何も出力されず、x の値は常に 0 になり、除算が発生したかどうかはわかりません。したがって、常に例外を適切に処理してください。

于 2013-07-11T09:28:43.373 に答える
1

これは一般的に悪いコードの印です - 少なくとも例外が何であるかを報告することによって、常に例外を処理したいと考えています。例外を無視すると、プログラムを実行し続けることができますが、通常、例外は何らかの理由でスローされ、あなたまたはユーザーはその理由を知る必要があります。キャッチオールを実行してエスケープするということは、コーダーが怠惰すぎて、発生した問題を修正できなかったことを意味します。

例外は、コーダーが引数を渡すためだけに例外をスローしている場合です。これは、DailyWTF で一度見たものです。

于 2013-07-11T09:30:50.080 に答える
1

通常、例外を吸収するべきではありませんが、ある種の追加機能を支援するためだけのビジネス ロジックから外れた関数があるなどの理由がある可能性があります。その関数が例外をスローした場合にアプリケーションを中断させたくない場合があります。その場合、例外を吸収/食べます。ただし、空の catch ブロックはお勧めしません。今後のために、これを ELMAH またはその他のエラー ログ ツールに記録する必要があります。

于 2013-07-11T09:32:48.480 に答える