gpt4 book ai didi

python - 使用异常返回异常值 : is this good practice?

转载 作者:行者123 更新时间:2023-11-28 22:49:37 25 4
gpt4 key购买 nike

让一个函数在大多数时候返回 None 是不是一个好的 Python 实践,而异常(exception)通过在存储值的地方引发异常来返回有用的 ?

我对此有点不安,因为异常最常用于表示某种问题,异常的某些属性提供有关问题的一些详细信息。在这里,我希望异常的实际意思是“这是此函数的异常结果”。

为此使用异常很诱人,因为 (1) 这仅在特殊情况下完成,并且 (2) 在 Python 中这是有效的(比 if … is not None:… 更有效) .另一方面,异常本身并不是任何类型错误的标志,它只是异常返回值的载体。

是否有任何官方建议反对使用异常从函数异常返回值?

PS:这是一个用例:

  • 对象方法根据新数据更新对象的内部状态(这是一个有限状态自动机)。
  • 在某些时候(通常是在获得许多数据点之后),该方法认为必须采取一些行动(在我的例子中:对象的一些日期应该存储在数据库中,并且对象的状态重置为初始状态状态,它已准备好获取更多数据)。

因此,对于方法来说,事件的顺序是:获取数据,更新状态,获取数据,更新状态,……啊!我们到达了一个特殊的状态,应该存储有关该对象的信息!重置对象状态并发送相关信息;获取数据、更新状态、获取数据、更新状态……因此,大多数时候,该函数更新对象的内部状态并且不返回任何内容。在特殊情况下,它必须发送有关对象的重要信息。

最佳答案

异常可以为正常代码流建模任何异常。错误是最常见的用例,但是任何正常返回类型没有真正意义的地方都可以被视为引发异常的机会。

为非错误用例引发异常非常好,如果它可以简化您的流程。

请记住,引发和捕获的 Exception 对象本身就是一个值。附加信息是一种完全可以接受的与来电者沟通的方法,以表示偏离“正常”。

相比None这样的标记值,我更喜欢异常;它使处理变得明确,并且实际上可以在开发人员忘记处理异常返回值时导致更清晰的处理和更好的反馈。如果您的代码通常返回一个列表,但在特定的异常情况下,您返回 None并且调用者不处理它,那么您会遇到奇怪的错误某处。 TypeError: 'NoneType' object is not iterable 比显式未处理的异常更神秘。

关于python - 使用异常返回异常值 : is this good practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611310/

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