首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么抛出异常比返回错误代码更好?

为什么抛出异常比返回错误代码更好?
EN

Stack Overflow用户
提问于 2011-01-13 00:08:54
回答 3查看 15.5K关注 0票数 36

遗留错误处理倾向于遵循这样的方法,即所有函数都根据成功/失败返回代码。您将检查此代码并适当地处理(如果出现错误)。

然而,现代编程语言遵循异常模型,如果发生了一些无法正确处理的异常,就会抛出一个异常--它会不断冒泡,直到得到处理。

我的问题是,为什么我们要转向异常模型?这背后的原因是什么?为什么它更好?

解释/链接将非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-13 00:12:27

关于这一点,我已经写了很长一篇文章:Exceptions vs. status returns,但很简短:

  1. Exceptions让您的代码在测试每次调用的状态返回时都能清除所有必要的检查,
  2. Exceptions允许您使用函数的返回值作为实际值,
  3. Exceptions可以携带比状态返回更多的信息,
  4. 最重要的是:异常不能通过不采取行动而被忽略,而状态返回可以。

< code >G210

在最后一点上展开:如果您忘记了对状态返回执行应该执行的操作,则会忽略错误。如果你忘了做你应该对异常做的事情,异常就会冒泡到软件的外层,在那里它变得可见。

票数 50
EN

Stack Overflow用户

发布于 2011-01-13 00:12:01

这里有几个原因

  • 忽略异常需要开发人员执行操作,而忽略错误的返回值则恰好需要0操作。从理论上讲,这使得开发人员更有可能处理错误,而不是忽略它,甚至没有意识到它正在发生。
  • 在错误发生点和处理之间提供了更清晰的分离。它不会强制在两者之间的每个点上手动传播错误。与简单的错误代码相比,
  • 异常可以产生更大、更丰富的信息负载。有一些方法可以解决错误代码问题,但这更像是事后才想到的,而且有点麻烦。
票数 12
EN

Stack Overflow用户

发布于 2020-03-25 08:19:58

明确表示出了一些错误,程序员很难忽略这一点(因为如果没有catch块,程序就会终止)。

异常将终止函数的其余部分的执行,并将控制传递给下一个catch块(如果当前调用堆栈中有的话)。如果没有,则程序将终止)

用于Javascript的

是的,它是可选的,但您应该始终使用.catch()处理程序(对于Promise)。

这意味着,我们可以在一个单独的处理程序中处理许多函数中的许多错误,如下所示;

storeData()
    .then(changeSomething)
    .then(storeData)
    .catch((e) => {
        // Handle the error.
    })

在这里,我们可以看到如何在一个函数中处理三个不同函数的错误。本质上,catch的行为就像它将所有函数包装在一个同步的try/catch中一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4670987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档