assert-with-print-message (RUF030)
修复总是可用的。
作用
检查 assert expression, print(message)
的用法。
为什么这不好?
如果 assert x, y
断言失败,Python 解释器会引发一个 AssertionError
,并且 y
的评估值会被用作该断言错误的原始内容。然而,print
函数总是返回 None
,因此调用 print
的评估值将始终为 None
。
在这种情况下使用 print
调用将首先把消息输出到 stdout
,然后再引发一个空的 AssertionError(None)
。相反,应该移除 print
并将消息直接作为第二个表达式传递,从而允许 stderr
在格式良好的上下文中捕获该消息。
示例
建议改为
修复安全性
此规则的修复被标记为不安全,因为更改第二个表达式将导致引发不同的 AssertionError
消息,以及 stdout
输出的更改。