跳到内容

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 在格式良好的上下文中捕获该消息。

示例

assert False, print("This is a message")

建议改为

assert False, "This is a message"

修复安全性

此规则的修复被标记为不安全,因为更改第二个表达式将导致引发不同的 AssertionError 消息,以及 stdout 输出的更改。

参考