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