关于try catch的理解问题

以下来自于知乎的一位网友对try catch的理解, 并拿之和go的err做比较, 针对try catch说的比较好理解~~

我们不谈Java的checked exception。这货在其他语言里面并不多见。我们只谈一般的异常处理。好,那么,throw是什么很差的设计么?当然不是。throw再差也比err code强。为什么呢?你仔细想想,throw和return从逻辑上(注意:抽象地从逻辑上看,不要纠结语法和具体实现)讲难道不是很相似么?它们都是返回一个值给上层调用者。只不过throw是从错误信道返回值,return是从正常信道返回值而已。这两个信道互斥,构成Union的关系。此外通过throw返回的值(错误)必须用catch才能拿到。throw和return最大的区别在于throw打包了自动向上传递的逻辑。因为绝大部分错误都是不能在调用者接收到的时候直接处理的,只能一层层往上传。所以throw就打包了默认情况下直接上传错误的逻辑,这样就简化了大部分情况下的错误处理(什么都不用写)。从这里就可以看出它不是给你像if err那样处处要加catch的。你要是处处都加try catch,那代码必然是无比丑陋。然而这根本不是正确的用法。正常使用的话程序里面不应该有多少try catch的。就仿佛一切都是完美成功那样。而这正是go里面if err的问题。它强迫你处处用非常丑陋的代码来处理错误,哪怕某一处根本没有能力处理,也得写上一堆的if err。从这个角度讲明显是失败的。

此处评论已关闭