gpt4 book ai didi

exception - 什么时候抛出异常?

转载 作者:行者123 更新时间:2023-12-03 03:56:35 24 4
gpt4 key购买 nike

我为应用程序不期望的每个条件创建了异常。 UserNameNotValidExceptionPasswordNotCorrectException

但是,我被告知不应为这些条件创建异常(exception)。在我的 UML 中,这些是主流的异常,那么为什么它不应该是异常呢?

有创建异常(exception)的指导或最佳实践吗?

最佳答案

我个人的指导方针是:当发现当前代码块的基本假设不正确时,会抛出异常。

示例 1:假设我有一个函数,该函数应该检查任意类,如果该类继承自 List<>,则返回 true。该函数提出一个问题:“这个对象是 List 的后代吗?”这个函数永远不应该抛出异常,因为它的操作中没有灰色区域 - 每个类要么继承或不继承自 List<>,所以答案始终是"is"或“否”。

示例 2:假设我有另一个函数,它检查 List<> 并在其长度大于 50 时返回 true,如果长度小于 50,则返回 false。此函数提出问题:“此列表是否有超过 50 个项目?”但是这个问题做了一个假设——它假设给定的对象是一个列表。如果我给它一个 NULL,那么这个假设就是错误的。在这种情况下,如果函数返回true true false,则它违反了自己的规则。该函数无法返回任何内容并声称它正确回答了问题。所以它不会返回 - 它会抛出异常。

这相当于 "loaded question"逻辑谬误。每个函数都会提出一个问题。如果给出的输入使该问题成为谬误,则抛出异常。使用返回 void 的函数很难绘制这条线,但底线是:如果函数关于其输入的假设被违反,它应该抛出异常而不是正常返回。

这个等式的另一边是:如果您发现您的函数频繁抛出异常,那么您可能需要改进它们的假设。

关于exception - 什么时候抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com