您想在哪里捕获异常以及为什么?
我很有兴趣看到人们发现将try/catch块放在哪里是有用的,希望可能出现一些通用模式.我将用C++发布我的两个示例答案,但任何语言都可以.
请回答一个位置和原因.谢谢.
不要抓住任何你不准备和能够处理的东西.
因此,有顶级异常处理来按照您喜欢的方式轰炸应用程序意外异常,然后只捕获您需要的东西(尽可能接近它可能发生的地方)以获得所需的功能.
而且你应该只做以下两件事之一:实际上做一些事情来解决/解决问题或重新抛出一个更具描述性的异常,它将被捕获的异常作为它innerException
.
编辑:如果您需要一个finally
块(例如,释放您在代码中分配的内容),并且您没有任何有用的任何有用的异常,可能会弹出相同的逻辑:只是不处理它们.相反,使用a catch { throw; }
将异常重新抛出到更高级别,同时保持所有异常信息不变.(或者只是省略catch块,我认为/希望做同样的事情?)
我试图抓住那些我可以处理的异常.
我讨厌这样的代码:
String s="12"; Integer i; try { i = Integer.parseInt(s); } catch(ParseException pe) { System.out.println("hihihihihihihi!!!); }
我特别讨厌的是,这通常做的就是中止线程,因为之后三行会有一个对i的访问,它将假设i!= null.
然后,您将读取您的堆栈跟踪并滚动并滚动并滚动日志,直到您发现第一个重大错误,使其他一切崩溃.
无论如何,我希望Java不会强迫我抓住我无法处理的例外情况.但我能做的就是:
catch(Exception e) { throw new RuntimeException(e); }
我在函数定义中声明了很多"抛出".
我仍然梦想有一天Eclipse会在一个未被捕获的异常时自动打开一个正确的调试器.那天,我的方法将打开正确的行.
在其他语言中,比如Smalltalk,我只捕获了我能处理的错误.当输入不符合我的期望时,我很高兴地抛出未被捕获的异常.
我的想法是,我不希望记录或记录错误.我想要它修复.