-1

在某些应用程序中,我遇到了一些故意吃掉异常的代码行。在我的应用程序中,这样做的好处是 - 忽略异常并继续循环(处理的异常是针对循环内引发的错误)。即使是经验丰富的开发人员,以下代码行看起来也很邪恶。但是对上下文是明智的(我的意思是,这是要求 - 处理目录中的所有文件)。

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

忽略异常还能带来哪些其他好处?

4

4 回答 4

3

如果要求处理所有文件,如果在处理其中一个文件时出现异常,那么该要求不是已经破坏了吗?要么失败,要么不需要异常。

如果要继续处理异常,则继续。为什么不只报告处理给定文件的问题,以便以后有人可以手动处理它?可能即使是愚蠢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 回答