15

我正在尝试 Python 3.5 引入的输入提示,但使用本地存根作为 mypy 的输入提示时遇到了问题。

我做的实验是创建 kk.py 包含

def type_check(a):
    pass

另外,我把 kk.pyi 包含

def type_check(a: int):...

在同一目录中。这样,我尝试通过在kk.py中将字符串传递给type_check来触发“ncompatible types in assignment”的错误。但是,当我运行mypy kk.py并且没有出现错误时。

因此,我尝试了 mypy doc 建议的另一种方法,即将环境变量 MYPYPATH 设置为 ~/some/path/stub 并将 kk.pyi 放入目录中。但是,我遇到了同样的错误。

任何人都可以帮助我吗?

这是关于如何使用本地存根的 mypy wiki 。

4

1 回答 1

16

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

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

def try_check(a):
    pass

在 kk.py 中,和

def try_check(a: int):...

在与 kk.py 相同的目录或 MYPYPATH 指定的目录中的 kk.pyi 中,如果您导入 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 会报告类型冲突。

于 2016-06-14T07:04:48.110 回答