关于是否在最外层处理异常

UncleBen 发布于 2016/01/12 17:18
阅读 267
收藏 2

    对异常处理有疑惑。

    第一种情况,不在最外层try-catch,那么例如,在被调用的方法内部进行try-catch,当被调用的方法内部抛出异常,方法内部进行try-catch,那么上层的代码就会继续运行,这可能不是我们所期待的,因为异常已经发生,代码可能没有继续运行下去的必要,而且运行下去可能会报更多的错。

    第二种情况,在最外层try-catch,有时候方法内部其实已经可以处理异常,例如在catch块里给用户反馈信息,但是方法内部,两处都抛出了IOException,那么最外层try-catch时,就不能精准地给用户反馈信息,因为两种不同的原因都抛出了同一种异常。

    请问站友们是怎样处理这些情况的,先谢了。   

加载中
0
sxgkwei
sxgkwei
没有固定方式。但是一般都是有异常就抛,从不捕获。只在web.xml 里面配置一个异常跳转页面。其它都不管,只管抛。除非对外开放的公共接口,那么就在整个方法最外面包一层,然后反馈对方系统内部异常。
UncleBen
UncleBen
谢谢您,您的回复很有用!
0
xpbob
xpbob
我是按照逻辑分的,就是一个逻辑里的一个部分出问题,那这个逻辑就应该停止,我对整个逻辑try,具体出错了,看exception信息,基本能定位到问题
UncleBen
UncleBen
谢谢您,您的意思就是在最外层catch,我也认为这是普遍的,多数情况下使用的做法。
0
刚田武
刚田武

不写代码,但是纸上谈下兵,个人理解:

     内部try catch,但是不处理异常,而是抛出自定义的异常,再外部try catch,方便用户和最外层判断异常信息并反馈给用户,这样上层的代码不会继续运行的

     如果你内部能处理、能忽略的异常就没必要再抛出来了

UncleBen
UncleBen
谢谢您,我现在也有这样做,考虑到毕竟真的需要给用户反馈到较为精确的信息,有时候是要这样做,总要根据实际情况来考虑方案的嘛~
0
如比如比
如比如比
在必要时catch,也可以把catch到的异常变成正常的处理,或者加工成用户可以接受的信息的,并不是有异常就必须挂掉的。由于成本和对用户操作控制等因素影响,直接抛出异常的情况是比较常见的,但没有固定的做法,结合实际情况好了,该出手时就出手吧,要不怎能风风火火哈。
UncleBen
UncleBen
哈哈,谢谢您风趣的回复,的确给了我帮助
返回顶部
顶部