我收到MyPy错误"缺少返回语句",即使我检查函数内所有可能的情况也是如此。
例如,在下面的代码中,MyPy仍然给了我一个错误"9: error: Missing return statement"
,即使color
只能是Color.RED
、Color.GREEN
或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"
这个问题确实没有问题——mypy 目前确实是这样表现的。枚举支持是内置的,并且是初步的,并且有些临时。您正在寻找的检查类型可能会在将来实施。
但是,此代码是脆弱的;如果颜色发生变化,它将静默中断。请记住,Python 不是一种编译语言 - 类型检查器传递是可选的,其他人可能不会使用它。
IMO的正确方法是在末尾添加assert False
。这也将使mypy保持沉默。