为啥“引发错误”有效,而“断言”无效?

Posted

技术标签:

【中文标题】为啥“引发错误”有效,而“断言”无效?【英文标题】:Why does 'raised Error' work, but 'assert' doesn't?为什么“引发错误”有效,而“断言”无效? 【发布时间】:2019-06-10 12:38:48 【问题描述】:

我使用assert和引发ValuError有区别,为什么?

以下代码,只在我使用raise ValueError时停止我的脚本,assert不起作用。

assert (len(dictA) != len(dictB)), 'Your have an .... error'

if len(dictA) != len(dictB):
    raise ValueError('Your have an ... error')

【问题讨论】:

另请注意,这不是断言的最佳实践用法,请参见例如***.com/a/945135/3001761 【参考方案1】:

你需要使用

assert (len(dictA) == len(dictB))

条件评估为 False 时引发错误。

【讨论】:

谢谢费利佩。你介意解释一下在这种情况下哪个(assert 或 valueerror)更好用吗? 取决于您的用例。检查这个问题的接受答案***.com/questions/40182944/…

以上是关于为啥“引发错误”有效,而“断言”无效?的主要内容,如果未能解决你的问题,请参考以下文章

查询在 mysql 工作台中有效,但在 php 中无效,不知道为啥

在 PHP 中,为啥“or die()”有效,而“or return”无效?

当使用带有 AVX-512 加载和存储的屏蔽寄存器时,是不是会因对屏蔽元素的无效访问而引发错误?

为啥类创建会引发错误

Webpack 为啥只有 scss 有效,而 css 无效?

由 amplify 生成的 Graphql 查询运行良好,但由于身份验证规则而引发错误。为啥?