Python中的静态类型检查工具

我正在使用一个大的现有的Python代码库,并希望开始添加类型注释,所以我可以得到一些水平的静态检查。我想象的是像ErlangStrongtalkTyped Scheme/Racket

我看到快速和脏的装饰器,基于函数参数和返回类型注释插入动态检查,但我正在寻找更健壮,并在编译时执行检查的东西。

现在有什么工具可用于这种事情?我熟悉编译器和类型检查,如果它有一个良好的基础,我肯定愿意改进一个不完整的工具。

(注意:我不讨论静态打字的优点/缺点。)

编辑:一个例子:

def put(d, k, v):
   d[k] = v

我想能够注释put函数具有类型put< K,V>(dict< K,V>,K,V) – >没有。

更新:新的PEP 484(2014年9月)定义了一个标准静态类型和类型注释在Python 3.5。有一个类型检查工具,称为mypy,与PEP 484兼容。

编辑2016-11-11:只需使用mypy.类型提示可以逐步添加。在Python 3源代码中,它验证标准PEP 484类型提示。类型仍然可以在Python 2中使用特殊注释表示。 Guido likes it

这篇文章最初写的很久以前,mypy是一件事。我保留了帖子的原始内容,虽然它不是很准确。

原帖:

您可能想查看本related StackOverflow post on static analysis for Python中提到的一些项目。

综上所述:

> pylint
> PyFlakes
> PyChecker

由于Python广泛地使用duck typing,在其他语言中可能被称为“类型错误”的东西可能最终会在Python中“对象X不支持方法Y”。

编辑2011-05-17:

我同意delnan静态类型是不可能的Python [显然错了]。但是,由于我们的怀疑似乎不会阻止你,我只能给你更多的信息。有请:

>讨论type inference for Python.(其他链接来自这里。)
> Guido van van Rossum的关于添加可选静态类型的文章:part 1part 2
> RPython,Python的一个子集,可能有机会被静态分析足够做某种形式的类型检查。

http://stackoverflow.com/questions/6025714/tools-for-static-type-checking-in-python

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Python中的静态类型检查工具