gpt4 book ai didi

Python异常代表一个错误?

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:27 25 4
gpt4 key购买 nike

有时我希望引发一个只有在代码有错误时才会发生的异常。例如,假设函数 foo 应该返回 1 到 3 之间的整数。考虑以下代码:

switch = foo()  # Should be an integer between 1 and 3
if switch == 1:
...
elif switch == 2:
...
elif switch == 3:
...
else:
# What goes here?

一种可能是assert False, "foo() returned illegal value: %s"。另一种选择是 raise Bug("foo() returned illegal value: %s"% switch),用于某些适当的异常类 Bug。对这种情况下的最佳做法有什么想法吗?

最佳答案

没有冒犯@jonrsharpe :),但我不是特别喜欢ValueError 解决方案。

这有两个原因:

  1. 使用他对 ValueError 的描述,在以下情况下会引发异常:

    a built-in operation or function receives an argument that has the right type but an inappropriate value...

    您的函数将返回一个不合适的值,而不是接收一个值。

  2. ValueError 是针对接收到不适当值的工作代码。但是,您说过要在出现错误时引发错误。意思是,代码被破坏了。

我认为更好的解决方案是提高 AssertionError .在我看来,这样做更清楚,因为它断言(确保)foo 的返回值是好的。

但是,我会这样实现它:

switch = foo()
assert switch in (1, 2, 3), "foo() returned illegal value: %s" % switch
if switch == 1:
...
elif switch == 2:
...
else:
...

如您所见,我将断言语句放在 if 语句之前。这引起了人们的注意,并更清楚地表明我们正在防止异常事件(错误)发生。

关于Python异常代表一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733477/

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