使用Mypy本地存根

时间:2016-05-31 05:03:29

标签: python mypy

我正在尝试使用Python 3.5引入的输入提示,并通过使用本地存根作为mypy的输入提示来解决问题。

我做的实验是创建包含

的kk.py.
def type_check(a):
    pass

另外,我把kk.pyi包含在

def type_check(a: int):...

在同一目录中。通过这种方式,我试图在分配"中触发" ncompatible类型的错误。通过将字符串传递给kk.py中的type_check。但是,当我运行 mypy kk.py 并且没有错误时。

因此我尝试了mypy doc建议的另一种方式,即将环境变量MYPYPATH设置为〜/ some / path / stub并将kk.pyi放在目录中。然而,我得到了同样的错误。

任何人都可以帮助我吗?

这是how上使用本地存根的mypy wiki。

1 个答案:

答案 0 :(得分:10)

我不知道为什么有人在没有回答这个问题的情况下对这个问题进行了投票,或者评论了他/她不喜欢这个问题的原因,但这是我想出的答案:

mypy的存根文件仅在导入模块时有效。因此,如果你有

def try_check(a):
    pass

以kk.py和

表示
def try_check(a: int):...
在与kk.py在同一目录中的kk.pyi中或在MYPYPATH指定的目录中,如果导入kk,mypy将键入检查python文件。 如果你有,那就是

import .kk
kk.try_check('str')
在test.py中运行 mypy test.py ,mypy将报告类型冲突。但是,如果您有

,则不会报告冲突
try_check('str')

在kk.py。

您可以在包含函数定义的程序中键入检查函数如果在函数定义中明确写入了键入提示。例如,你可以写

def try_check(a: int):
    pass

try_check('str')

在kk.py中,然后是mypy kk.py 。 Mypy将报告类型冲突。