pytype-用于检查并推断Python代码的类型,无需类型注释
pytype是用于检查并推断Python代码的类型的python库,无需类型注释。Pytype可以:
清除纯Python代码,标记常见错误,例如拼写错误的属性名称,错误的函数调用等等,甚至跨越文件边界。
强制执行用户提供的类型注释。对于pytype,注释是可选的,但它将检查并在存在的地方应用它们。
在独立文件(“ pyi文件”)中生成类型注释,可以使用提供的merge-pyi工具将其合并回Python源 。
Pytype是静态分析器;它不执行运行的代码。
Google的成千上万个项目都依赖pytype来保持其Python代码的类型正确且无错误。
pytype与其他类型检查器有何不同?
Pytype使用推理而不是渐进式输入。这意味着即使代码上没有类型提示,它也会推断代码的类型。因此,它可以检测到类似这样的代码的问题,而其他类型检查器可能会错过这些问题:
def f(): return "PyCon"def g(): return f() + 2019# pytype: line 4, in g: unsupported operand type(s) for +: 'str'# and 'int' [unsupported-operands]
Pytype是宽容而不是严格。这意味着它允许所有在运行时成功且不与注释冲突的操作。例如,此代码将在pytype中安全通过,但在其他类型检查器中失败,后者将在变量初始化后立即将类型分配给变量:
from typing import Listdef get_list() -> List[str]: lst = ["PyCon"] lst.append(2019) return [str(x) for x in lst]# mypy: line 4: error: Argument 1 to "append" of "list" has# incompatible type "int"; expected "str"
快速开始
要快速开始对文件或目录进行类型检查,请使用pip安装pytype或者通过网盘下载pytype的源代码文件,并替换file_or_directory为您的输入:
pip install pytypepytype file_or_directory
要在整个软件包上设置pytype,请将以下内容添加到setup.cfg软件包上方目录中的文件中,并替换package_name为软件包名称:
[pytype]inputs = package_name
现在,您可以运行no-argument命令pytype以对软件包进行类型检查。将pytype添加到自动化测试中也很容易;请参见 在Travis上运行pytype的GitHub项目的示例。
最后,pytype生成推断类型信息的文件,默认情况下位于.pytype/pyi。您可以使用以下信息对相应的源文件进行类型注释:
merge-pyi -i <filepath>.py .pytype/pyi/<filename>.pyi