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
切片可能包含尾行注释,修复会删除这些注释。