我可以让 assert
抛出我选择的异常而不是 AssertionError
吗?
更新:
我将解释我的动机:到目前为止,我已经进行了引发我自己的异常的断言式测试;例如,当您创建带有某些参数的 Node
对象时,它会检查参数是否适合创建节点,如果不适合,则会引发 NodeError
。
但我知道 Python 有一个跳过断言的 -o
模式,我希望它可用,因为它可以让我的程序更快。但我仍然希望有自己的异常(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/