MyPy 可以检测到什么,不能检测到什么?

What can MyPy detect and what can it not?

我刚开始使用 MyPy 为我的 python 程序添加更多静态类型。我试过这个:

import sys

def summe (a: int, b: int):
    print (a + b)    

def main():       
    x: int = 10  
    y: int = 20
    z: str = '30'
    summe (x, y) 
    summe (x, z) 


if __name__ == '__main__':
    sys.exit(main()) 

这显然是一个类型错误并在运行时崩溃,但 MyPy 说:Success: no issues found in 1 source file

我是不是做错了什么,错过了一些设置?我有 Windows 10,Python 3.10,Eclipse 下最新的 MyPy。

您的 main 不是 type-checked,因为您没有对其进行注释。添加注释:

def main() -> None:

而第二个 summe 调用将如您所料导致类型错误。

Return值用->:

表示
#                          -> Return value
def summe (a: int, b: int) -> None:
    print (a + b)


#          -> Return value
def main() -> None:
    x: int = 10
    y: int = 20
    z: str = '30'
    summe (x, y)
    summe (x, z)


if __name__ == '__main__':
    sys.exit(main())