我正在启动一个新的python项目(python 3.5+),我希望在整个代码库中强制执行类型提示。有什么方法可以用flake8或其他工具来实现吗?
发布于 2017-04-03 14:55:46
看看形象化。
在网站上:
Mypy是Python的一个实验性的可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。Mypy将Python的表达能力和方便性与强大的类型系统和编译时类型检查结合起来。Mypy类型检查标准Python程序;使用任何Python运行它们,基本上没有运行时开销。
编辑
实际上,mypy是一个类型检查器,因此在默认情况下,它只检查是否存在与类型相关的提示或推断错误。为了让它报告非暗示的类型,可以使用附加的命令行开关作为文档化的这里。
每当
--disallow-untyped-defs遇到没有类型注释的函数定义时,它都会报告错误。--check-untyped-defs没有前面的选项严重-它的类型检查每个函数的主体,不管它是否有类型注释。(默认情况下,不带注释的函数体不进行类型检查。)它将假设所有参数都有类型为Any,并始终将其推断为返回类型。 每当具有类型注释的函数调用没有注释的函数时,--disallow-untyped-calls都会报告错误。 ..。
发布于 2021-07-26 15:02:46
flake8有一个名为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:发布于 2017-04-03 15:00:52
其他提到的mypy用于检查类型提示,但它没有强制执行。为了对类型注释更加严格,您需要启用以下配置设置
disallow_untyped_calls(布尔值,默认为False)不允许在没有类型注释的情况下调用带有类型注释的函数。disallow_untyped_defs(布尔值,默认为False)不允许在没有类型注释或类型注释不完整的情况下定义函数。
或者,您可以将这些设置设置为命令行参数。
FYI,PyLint还不支持强制类型注释,但是有一个特征请求。而且,我在flake8/pyflakes战线上没有看到任何相关的东西--想想打开功能请求吧。
https://stackoverflow.com/questions/43187829
复制相似问题