Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Mypy本地存根_Python_Mypy - Fatal编程技术网

Python 使用Mypy本地存根

Python 使用Mypy本地存根,python,mypy,Python,Mypy,我正在尝试Python3.5引入的类型提示,但使用本地存根作为mypy的类型提示时遇到了一个问题 我做的实验是创建kk.py def type_check(a): pass def type_check(a: int):... 另外,我把kk.pyi def type_check(a): pass def type_check(a: int):... 在同一目录中。通过这种方式,我试图通过向kk.py中的type_check传递一个字符串来触发“赋值中的不兼容类型”错误。

我正在尝试Python3.5引入的类型提示,但使用本地存根作为mypy的类型提示时遇到了一个问题

我做的实验是创建kk.py

def type_check(a):
    pass
def type_check(a: int):...
另外,我把kk.pyi

def type_check(a):
    pass
def type_check(a: int):...
在同一目录中。通过这种方式,我试图通过向kk.py中的type_check传递一个字符串来触发“赋值中的不兼容类型”错误。但是,当我运行mypy kk.py时,没有得到任何错误

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

有人能帮我吗


下面是mypy wiki,可以使用本地存根

我不知道为什么有人投票否决了这个问题,却没有回答,也没有评论为什么他/她不喜欢这个问题,但我找到了以下答案:

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

def try_check(a):
    pass
import .kk
kk.try_check('str')
在kk.py中,以及

def try_check(a: int):...
在与kk.py位于同一目录的kk.pyi中,或者在MYPYPATH指定的目录中,如果导入kk,mypy将键入check-the-python文件。 是的,如果你有

def try_check(a):
    pass
import .kk
kk.try_check('str')
在test.py和run mypy test.py中,mypy将报告类型冲突。但是,如果您有冲突,它将不会报告冲突

try_check('str')
用kk.py

如果在函数定义中显式写入键入提示,则可以在包含函数定义的程序中键入检查函数。例如,你可以写

def try_check(a: int):
    pass

try_check('str')

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

谢谢!我一直在努力解决这个问题。我真的不明白为什么mypy会这样工作。有什么想法吗?@SolomonBothwell我觉得这是对Django这样的大模块的静态检查程序的最初尝试,因此它假设用户将检查包中的内容,而不是自己编写的程序。你完全可以键入检查自己的程序,只是没有必要或理由使用单独的存根文件。如果您的程序导入了一个没有注释的第三方库,但您想使用它们,这时您需要本地存根。@OJFord当然,正如文档所示,我们可以这样做。然而,这篇文章的重点是如何使用一个单独的存根文件,而不是我们为什么要这样做。@OJFord我也更喜欢使用本地存根,而不是就地类型暗示,因为在当前状态下语法非常臃肿,代码读起来有点不舒服。更不用说循环导入和解决更复杂类型提示问题所需的变通方法。请在此处找到原因和解决方案: