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

时间:2017-04-03 14:52:34

标签: python python-3.x

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

4 个答案:

答案 0 :(得分:3)

看看mypy

来自网站:

  

Mypy是Python的实验性可选静态类型检查器,旨在结合动态(或#34; duck")键入和静态类型的好处。 Mypy将Python的表现力和便利性与强大的类型系统和编译时类型检查相结合。 Mypy类型检查标准Python程序;使用任何基本没有运行时开销的Python VM运行它们。

修改

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

  每当遇到没有类型注释的函数定义时,

--disallow-untyped-defs都会报告错误。

     

--check-untyped-defs没有上一个选项那么严重 - 它会检查每个函数的正文,无论它是否有类型注释。 (默认情况下,没有注释的函数体不是类型检查的。)它将假设所有参数都具有Any类型,并且总是将Any推断为返回类型。

     只要带有类型注释的函数调用没有注释的函数,

--disallow-untyped-calls就会报告错误。

     

...

答案 1 :(得分:2)

有一个名为 flake8-annotations flake8 插件

您可以使用

安装它
pip install flake8-annotations

所以:

def test_function(x, y):
  pass

将输出:

./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

这是正确的版本:

def test_function(x: int, y: int) -> None:

答案 2 :(得分:1)

mypy可用于验证Python程序的类型提示。文档可以找到here,而且非常全面。

答案 3 :(得分:1)

其他提到mypy用于检查类型提示,但不强制执行。为了对类型注释更加严格,您需要启用following configuration settings

  

disallow_untyped_calls(布尔值,默认值为False)不允许调用   函数没有带类型的函数的类型注释   注释

     

disallow_untyped_defs(布尔值,默认为False)不允许定义   没有类型注释或类型不完整的函数   注释

或者,您可以将这些设置设置为command-line arguments

仅供参考,PyLint尚不支持强制类型注释,但有一个feature request。并且,我在flake8 / pyflakes前面没有看到任何相关内容 - 请考虑opening a feature request