跳到内容

unnecessary-nested-literal (RUF041)

添加于 0.10.0 · 相关问题 · 查看源码

有时提供修复。

作用

检查是否存在不必要的嵌套 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"],
]

建议改为

AllModes = Literal[
    "r", "r+", "w", "w+", "wt", "w+t", "r+", "r+t", "a", "a+", "at", "a+t"
]

或者像第一个示例那样将字面量赋值给变量。

修复安全性

Literal 切片跨多行书写且某些行带有行尾注释时,此规则的自动修复标记为“不安全”。

参考