用mypy测试

python3.6引入的类型标注语法,为python程序提供了实现渐进式类型系统(gradual type hinting)的可能性。

Mypy是支持python3.6以上版本的静态类型检查器,旨在结合动态类型(鸭子类型)和静态类型的好处。 Mypy将python的表现力和便利性与强大的类型系统和编译时类型检查相结合。Mypy类型检查没有运行时开销。

安装mypy

pip install mypy

使用mypy

example.py

from lessweb import application

def f(a: str, b: str):
    return {'c': a * b}

app = application()
app.add_get_mapping('/', f)

if __name__ == '__main__':
    app.run()

可以用命令mypy example.py进行静态类型检查,检查结果如下:

example.py:4: error: Unsupported operand types for * ("str" and "str")
example.py:6: error: Module not callable

mypy发现了两个错误,一是第4行尝试对两个字符串相乘,二是第6行的application是Module,后面不能跟()
如果没有mypy,这些错误往往会等到线上部署时或者用户请求时才会暴露!

在这个提示的帮助下,可以把example.py改成:

from lessweb import Application

def f(a: str, b: str):
    return {'c': a + b}

app = Application()
app.add_get_mapping('/', f)

if __name__ == '__main__':
    app.run()

再运行mypy example.py就不会提示任何错误了。