6

我收到一个 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"
4

1 回答 1

4

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

但是,这段代码很脆弱;如果颜色会改变,它会默默地打破。请记住,Python 不是一种编译语言 - 类型检查器传递是可选的,其他人可能不会使用它。

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

于 2017-11-08T17:19:54.030 回答