在某些应用程序中,我遇到了一些故意排除异常的代码行。在我的应用程序中,这样做的好处是 - 忽略异常并继续循环(处理的异常是针对循环内部抛出的错误)。即使是经验丰富的开发人员,以下代码行看起来也很邪恶。但对上下文是明智的(我的意思是,这是要求 - 处理目录中的所有文件)。
try{
//some lines of code which might throw exception
}catch(Exception e){
//no code to handle the error thrown
}
哪些其他好处可以忽略例外?
答案 0 :(得分:3)
如果需要处理所有文件,如果在处理其中一个文件时遇到异常,是否已经破坏了要求?无论是失败还是不需要例外。
如果您想继续处理处理例外,请继续。为什么不报告处理给定文件的问题,以便以后有人可以手动处理它?可能甚至是愚蠢的cerr << "Hey I had trouble with this file '" << file <<', so I skipped it.\n"
总比没有好。
异常就是发出信号。如果你忽略了它,你要么做一些讨厌的事情,要么就不需要例外。
忽略我能想到的异常的唯一正当理由是有人在没有充分理由的情况下抛出异常。那么也许,是的,忽略。
答案 1 :(得分: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);
}
}
这将简单地打印0
x的默认值,因为在分割期间发生了异常,并且未将值分配给x
在这里你应该得到分裂的实际结果。好吧它肯定会抛出ArithMeticException
,因为我们除以零,我们没有在catch块中写任何东西。因此,如果发生异常,则不会打印任何内容,x的值将始终为0,我们无法知道除法是否发生。所以总是正确处理异常。
答案 2 :(得分:1)
这通常是错误代码的标志 - 您总是希望通过至少报告异常来处理异常。忽略异常将使您的程序继续运行,但通常会抛出异常,并且您或用户需要知道该原因是什么。做一个全能和逃避只是意味着编码人员懒得解决出现的任何问题。
例外情况是编码器只是为了传递参数而抛出异常,这是我在DailyWTF上看到的一次。
答案 3 :(得分:1)
通常我们不应该吸收异常,但可能有一个原因,就是有一个缺乏业务逻辑的功能只是为了帮助某些额外的功能,那么你不希望你的应用程序在该函数抛出时中断在这种情况下你吸收/吃掉异常的例外。但是我不建议使用空的catch块,应该在ELMAH或其他错误记录工具中记录它以供将来使用。