unnecessary-nested-literal (RUF041)
有时提供修复。
作用
检查是否存在不必要的嵌套 Literal。
为什么这不好?
建议使用单个 Literal,它既等价又更简洁。
根据 PEP 586 的提议,支持使用其他字面量来参数化字面量是一项提升易用性的功能,旨在支持如下模式:
ReadOnlyMode = Literal["r", "r+"]
WriteAndTruncateMode = Literal["w", "w+", "wt", "w+t"]
WriteNoTruncateMode = Literal["r+", "r+t"]
AppendMode = Literal["a", "a+", "at", "a+t"]
AllModes = Literal[ReadOnlyMode, WriteAndTruncateMode,
WriteNoTruncateMode, AppendMode]
因此,类型检查器也支持嵌套字面量,但这比扁平化的 Literal 可读性差。
AllModes = Literal[Literal["r", "r+"], Literal["w", "w+", "wt", "w+t"],
Literal["r+", "r+t"], Literal["a", "a+", "at", "a+t"]]
示例
AllModes = Literal[
Literal["r", "r+"],
Literal["w", "w+", "wt", "w+t"],
Literal["r+", "r+t"],
Literal["a", "a+", "at", "a+t"],
]
建议改为
或者像第一个示例那样将字面量赋值给变量。
修复安全性
当 Literal 切片跨多行书写且某些行带有行尾注释时,此规则的自动修复标记为“不安全”。