V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhoudaiyu
V2EX  ›  程序员

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

  •  1
     
  •   zhoudaiyu · 2021-05-07 18:34:02 +08:00 via iPhone · 1151 次点击
    这是一个创建于 1056 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 条回复    2021-05-07 21:39:40 +08:00
    yumenawei
        1
    yumenawei  
       2021-05-07 18:38:09 +08:00
    如果 b 觉得 a 需要关注这个异常就抛给 a,如果 b 觉得 a 不需要关注就自己吃了就行。
    zhoudaiyu
        2
    zhoudaiyu  
    OP
       2021-05-07 18:41:19 +08:00 via iPhone
    @yumenawei 参数不合法以及产生的异常属于要抛出的,目前就想到这个
    Jooooooooo
        3
    Jooooooooo  
       2021-05-07 18:50:11 +08:00
    好问题, 也是一个好的面试题.
    yumenawei
        4
    yumenawei  
       2021-05-07 18:56:44 +08:00
    @zhoudaiyu #2 比如说,读取文件,文件名是合法的,但是文件不存在,就抛一个 FileNotFoundException,告诉调用者我不能正确的处理,是因为文件不存在,你看看这个问题怎么处理下。
    有一些允许调用超时的场景,就会将超时的异常给吞掉,不返回给调用者。
    rioshikelong121
        5
    rioshikelong121  
       2021-05-07 19:49:28 +08:00
    我的理解是能处理的自己处理 处理不了的往上扔。
    zhoudaiyu
        6
    zhoudaiyu  
    OP
       2021-05-07 19:50:08 +08:00 via iPhone
    @yumenawei #4 恩,但是有时候比较难界定感觉
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2021-05-07 20:12:48 +08:00 via iPhone
    @rioshikelong121 #5 这个思路好,下层尽可能处理,处理不了的扔回去,只要能分清哪些能处理哪些处理不了就可以了,确实是这个思路,感谢感谢
    evilStart
        8
    evilStart  
       2021-05-07 20:57:38 +08:00 via Android
    我的思路是对于调用者来说,这个错误会不会产生预期之外的结果,如果不会的话自己处理,如果会的话能往上扔的就往上扔,不要隐藏错误自己处理
    zhoudaiyu
        9
    zhoudaiyu  
    OP
       2021-05-07 21:38:54 +08:00 via iPhone
    @evilStart #8 结合了一下 5 楼的思路,大概就是自己能处理的自己尽量处理,但是不要吞掉一些本身不是被调用方的异常。感谢
    zhoudaiyu
        10
    zhoudaiyu  
    OP
       2021-05-07 21:39:40 +08:00 via iPhone
    @Jooooooooo #3 是不是比问 茴香豆的茴有多少写法好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1026 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:30 · PVG 06:30 · LAX 15:30 · JFK 18:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.