我可以让 assert 抛出一个我选择的异常而不是 AssertionError 吗?

更新:

我将解释我的动机: 到目前为止,我已经进行了断言式测试,这些测试引发了我自己的异常;例如,当您使用某些参数创建 Node 对象时,它会检查这些参数是否适合创建节点,如果不是,则会引发 NodeError

但我知道 Python 有一个 -o 模式,其中断言被跳过,我希望它可用,因为它会使我的程序更快。但我仍然希望有我自己的异常(exception)。这就是为什么我想在我自己的异常(exception)情况下使用断言。

最佳答案

这将起作用。但这有点疯狂。

try:
    assert False, "A Message"
except AssertionError, e:
    raise Exception( e.args )

为什么不是下面的?这不那么疯狂。
if not someAssertion: raise Exception( "Some Message" )

它只是比 assert 语句稍微冗长一点,但并没有违反我们的期望,即断言失败会引发 AssertionError

考虑一下。
def myAssert( condition, action ):
    if not condition: raise action

然后你可以或多或少地用这样的东西替换你现有的断言。
myAssert( {{ the original condition }}, MyException( {{ the original message }} ) )

完成此操作后,您现在可以自由地对启用或禁用或您想要做的任何事情大惊小怪。

另外,请阅读 warnings 模块。这可能正是您想要做的。

关于python - 使 Python 的 `assert` 抛出我选择的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1569049/

10-15 16:53