首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有理由抛出一个DivideByZeroException吗?

有理由抛出一个DivideByZeroException吗?
EN

Stack Overflow用户
提问于 2010-04-08 15:49:28
回答 16查看 9K关注 0票数 21

有什么情况下可以避免throw错误是一个好主意吗?

我特别想到的是DivideByZeroExceptionArgumentNullException

例如:

代码语言:javascript
复制
double numerator = 10;
double denominator = getDenominator();

if( denominator == 0 ){
   throw new DivideByZeroException("You can't divide by Zero!");
}

有理由抛出这样的错误吗?

注意:--我说的不是捕获这些错误,特别是知道是否有好的理由抛出这些错误。

只是为了重申

我知道,在我给出的示例中,处理错误可能会更好。也许这个问题应该重新措辞。是否有任何理由throw其中一个错误,而不是处理它在这个位置。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2010-04-08 15:57:49

假设您编写了一个库来处理不适合于Int64的非常大的整数,那么您可能需要为您编写的除法算法抛出DivideByZeroException。

票数 20
EN

Stack Overflow用户

发布于 2010-04-08 15:56:57

.NET运行时已经非常擅长抛出这些异常。它们也是对错误的高度描述,您不能对异常消息添加任何好的评论。“你不能除以零”没有增加任何价值。

但是,您可以通过筛选客户端代码传递的值来避免这些异常。如果客户端代码传递的是null,则需要具有参数名的ArgumentNullException,当它传递可能会触发DivideByZero的内容时,它将传递一个ArgumentException。

票数 14
EN

Stack Overflow用户

发布于 2010-04-08 16:04:39

这样做绝对是有原因的,就像大多数情况下抛出的问题一样,你必须把自己看作是一个团队中的开发人员。您正在编写的内容可能是另一个系统的一部分,也可能是一个库或组件。

如果您编写了一个数学库,并有一个名为Divide(int a, int b)的函数将它们分开,如果其他人想使用您的方法并将其传递为零,那么您将希望抛出一个异常,以便他们,作为一个开发人员,知道他们搞砸了。

如果不抛出异常,则会在代码中引入bug。如果我使用您的divide方法,并将值10和0放入其中,这将产生10/0,从而产生异常,唯一正确的答案是错误。如果您决定更改值,这样就不会发生错误,或者返回0,这不是我所期望的--我假设我的部门工作得很好,从来没有注意到问题。我很可能把它取出来,然后用在其他的计算中,不知道它是错误的答案,因为10/0不是0。

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

https://stackoverflow.com/questions/2601350

复制
相关文章

相似问题

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