即使测试了所有案例,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.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 不是编译语言 - typechecker pass 是可选的,其他人可能不会使用它。
IMO 的正确方法是在末尾添加 assert False
。这也会使 mypy 静音。
我收到 MyPy 错误 "Missing return statement",即使我在函数内检查所有可能的情况也是如此。
例如,在下面的代码中,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 不是编译语言 - typechecker pass 是可选的,其他人可能不会使用它。
IMO 的正确方法是在末尾添加 assert False
。这也会使 mypy 静音。