即使测试了所有情况,MyPy 也会出现错误“缺少返回语句”

ost*_*ach 6 python type-hinting mypy

我收到一个 MyPy 错误“缺少返回语句”,即使我检查了函数内的所有可能情况。

例如,在下面的代码中,MyPy 仍然给我一个错误"9: error: Missing return statement",即使color只能是Color.RED, Color.GREEN, or Color.BLUE,我测试了所有这些情况!

class Color(enum.IntEnum):
    RED: int = 1
    GREEN: int = 2
    BLUE: int = 3


def test_enum(color: Color) -> str:
    if color == Color.RED:
        return "red"
    elif color == Color.GREEN:
        return "green"
    elif color == Color.BLUE:
        return "blue"
Run Code Online (Sandbox Code Playgroud)

Ela*_*zar 4

这个问题确实没有问题 - mypy 目前确实是这样的。枚举支持是内置的,并且是初步的并且有些临时的。您正在寻找的那种检查可能会在将来实施。

然而,这段代码很脆弱;如果颜色发生变化,它就会悄然破裂。请记住,Python 不是编译语言 - 类型检查器传递是可选的,其他人可能不会使用它。

assert FalseIMO的正确方法是在最后添加。这也会让 mypy 沉默。