python - 让 Python 的 `assert` 抛出我选择的异常

标签 python exception assert

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

相关文章:

ruby-on-rails - Rails 4.0/Linode heisenbugs,部分 deux

c++ - 在 C++ 中使用 try-catch 进行 delete[] 或 delete 操作是必要的吗?

python - CSV 数据(时间戳和事件)的时间序列图 : x-label constant

python - 在 Instagram 中搜索主题标签,然后按位置过滤

python - 如何从 matplotlib 中的 .dat 文件读取多列,然后绘制到多个子图中

c++ - ‘断言’函数: weird behavior

c++ - 将 MFC 库移植到 linux 和 ASSERT

python - 使用 Mypy 键入 dict mixin 类

c++ - 我如何在运行时确定是否有特定 C++ 异常类的 catch block ?

c# - NUnit 与 Debug.Assert 冲突