即使测试了所有案例,MyPy 也会给出错误 "Missing return statement"

MyPy gives error "Missing return statement" even when all cases are tested

我收到 MyPy 错误 "Missing return statement",即使我在函数内检查所有可能的情况也是如此。

例如,在下面的代码中,MyPy 仍然给我一个错误 "9: error: Missing return statement",即使 color 只能是 Color.REDColor.GREENColor.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"

这个问题真的没有问题-mypy目前确实是这样的。枚举支持是内置的,而且是初步的,有点特别。您正在寻找的检查类型可能会在未来实现。

但是,这段代码很脆弱;如果颜色会改变,它会无声地破碎。 请记住 Python 不是编译语言 - typechecker pass 是可选的,其他人可能不会使用它。

IMO 的正确方法是在末尾添加 assert False。这也会使 mypy 静音。