冗余布尔字面量 (redundant-bool-literal) (RUF038)
有时提供修复。
此规则不稳定且处于预览状态。使用需要 --preview 标志。
作用
检查 Literal[True, False] 类型注解。
为什么这不好?
在类型注解中,Literal[True, False] 可以替换为 bool,二者语义相同,但 bool 更简洁且易于阅读。
bool 类型恰好有两个常量实例:True 和 False。静态类型检查器(如 mypy)在类型注解中会将 Literal[True, False] 视为与 bool 等价。
示例
建议改为
修复安全性
此规则的修复程序被标记为“不安全”,因为它可能会改变代码语义。具体来说:
- 当通过
Literal[True]和Literal[False]重载布尔参数时,类型检查器可能不会将bool视为等价(参见 #14764 和 #5421)。 bool并非严格等同于Literal[True, False],因为bool是int的子类;如果类型注解用于数值上下文,则此规则可能不适用。
此外,Literal 片段中可能包含行尾注释,修复程序会将其移除。