我可以让 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/