设计函数时如何界定何时需要捕获异常并自己处理,何时需要抛出异常给调用方?

2021-05-07 18:34:02 +08:00
 zhoudaiyu

比如 A 方法调用 B 方法,什么情况 B 要捕获异常自己处理,什么情况要抛给 A 去处理呢?我理解如果异常的产生和 A 调用传入的参数等无关,是 B 本身的问题,就要 B 自己处理,反之要抛给 A 。不知道理解的对不对?

1169 次点击
所在节点    程序员
10 条回复
yumenawei
2021-05-07 18:38:09 +08:00
如果 b 觉得 a 需要关注这个异常就抛给 a,如果 b 觉得 a 不需要关注就自己吃了就行。
zhoudaiyu
2021-05-07 18:41:19 +08:00
@yumenawei 参数不合法以及产生的异常属于要抛出的,目前就想到这个
Jooooooooo
2021-05-07 18:50:11 +08:00
好问题, 也是一个好的面试题.
yumenawei
2021-05-07 18:56:44 +08:00
@zhoudaiyu #2 比如说,读取文件,文件名是合法的,但是文件不存在,就抛一个 FileNotFoundException,告诉调用者我不能正确的处理,是因为文件不存在,你看看这个问题怎么处理下。
有一些允许调用超时的场景,就会将超时的异常给吞掉,不返回给调用者。
rioshikelong121
2021-05-07 19:49:28 +08:00
我的理解是能处理的自己处理 处理不了的往上扔。
zhoudaiyu
2021-05-07 19:50:08 +08:00
@yumenawei #4 恩,但是有时候比较难界定感觉
zhoudaiyu
2021-05-07 20:12:48 +08:00
@rioshikelong121 #5 这个思路好,下层尽可能处理,处理不了的扔回去,只要能分清哪些能处理哪些处理不了就可以了,确实是这个思路,感谢感谢
evilStart
2021-05-07 20:57:38 +08:00
我的思路是对于调用者来说,这个错误会不会产生预期之外的结果,如果不会的话自己处理,如果会的话能往上扔的就往上扔,不要隐藏错误自己处理
zhoudaiyu
2021-05-07 21:38:54 +08:00
@evilStart #8 结合了一下 5 楼的思路,大概就是自己能处理的自己尽量处理,但是不要吞掉一些本身不是被调用方的异常。感谢
zhoudaiyu
2021-05-07 21:39:40 +08:00
@Jooooooooo #3 是不是比问 茴香豆的茴有多少写法好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX