我有时希望提出一个只有在代码有错误时才会发生的异常.例如,假设函数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?
Run Code Online (Sandbox Code Playgroud)
一种可能性是类似的assert False, "foo() returned illegal value: %s".另一个选择是raise Bug("foo() returned illegal value: %s" % switch),对于一些适当的异常类Bug.对这种情况下的最佳做法有何看法?
没有冒犯@jonrsharpe :),但我不是特别喜欢这个ValueError解决方案.
这有两个原因:
使用他给出的描述ValueError,在以下情况下引发异常:
内置操作或函数接收具有正确类型但不适当值的参数...
你的函数将返回一个不合适的值,而不是一个.
A ValueError用于接收不适当值的工作代码.但是,您说您想在发生错误时引发错误.意思是,代码被破坏了.
我认为更好的解决方案是提高AssertionError.在我看来,这样做更清楚,因为它断言(确保)返回值foo是好的.
但是,我会像这样实现它:
switch = foo()
assert switch in (1, 2, 3), "foo() returned illegal value: %s" % switch
if switch == 1:
...
elif switch == 2:
...
else:
...
Run Code Online (Sandbox Code Playgroud)
如您所见,我将断言声明放在if 语句之前.这引起了人们的注意,并使我们更清楚地知道我们正在防止发生异常(一个错误).
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |