有没有办法让flake8检查源代码中的类型提示

Dar*_*dic 7 python python-3.x

我正在开始一个新的python项目(python 3.5+),我想在整个代码库中强制执行类型提示.有没有办法用它flake8或任何其他工具做到这一点?

小智 8

有一个flake8名为flake8-annotations的插件

您可以使用安装它

pip install flake8-annotations
Run Code Online (Sandbox Code Playgroud)

所以:

def test_function(x, y):
  pass
Run Code Online (Sandbox Code Playgroud)

将输出:

./test.py:2:9: ANN001 Missing type annotation for function argument 'x'
./test.py:3:9: ANN001 Missing type annotation for function argument 'y'
./test.py:1:24: ANN201 Missing return type annotation for public function
Run Code Online (Sandbox Code Playgroud)

这是正确的版本:

def test_function(x: int, y: int) -> None:
Run Code Online (Sandbox Code Playgroud)


Fel*_*lix 5

看一下mypy

从网站:

Mypy是用于Python的实验性可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。Mypy将Python的表达能力和便利性与功能强大的类型系统和编译时类型检查结合在一起。Mypy类型检查标准的Python程序;使用任何Python VM运行它们,基本上没有运行时开销。

编辑

实际上,mypy是类型检查器,因此默认情况下,它仅检查是否存在与提示或推断的类型相关的错误。要使其也报告非提示类型,可以使用此处记录的其他命令行开关。

--disallow-untyped-defs 每当遇到没有类型注释的函数定义时,就会报告错误。

--check-untyped-defs不如前一个选项那么严格-它的类型检查每个函数的主体,而不管它是否具有类型注释。(默认情况下,不对具有注释的函数主体进行类型检查。)它将假定所有参数的类型均为Any,并且始终将Any推断为返回类型。

--disallow-untyped-calls 每当带有类型注释的函数调用未定义注释的函数时,都会报告错误。

...