首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mypy本地存根

使用Mypy本地存根
EN

Stack Overflow用户
提问于 2016-05-31 05:03:28
回答 2查看 3.6K关注 0票数 18

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

我所做的实验是创建包含

代码语言:javascript
复制
def type_check(a):
    pass

另外,我把kk.pyi放在

代码语言:javascript
复制
def type_check(a: int):...

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

因此,我尝试了mypy建议的另一种方法,即将环境变量MYPYPATH设置为~/some/path/stub,并将kk.pyi放在目录中。我没有再犯任何错误。

有人能帮我吗?

下面是多么上使用本地存根的mypy。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 07:04:48

我不知道为什么有人不回答这个问题就否决了这个问题,也不知道为什么他/她不喜欢这个问题,但我想出的答案是:

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

代码语言:javascript
复制
def try_check(a):
    pass

在kk.py中,以及

代码语言:javascript
复制
def try_check(a: int):...

在kk.pyi中,在kk.py目录或MYPYPATH指定的目录中,如果导入kk,mypy将键入检查python文件。是的,如果你有

代码语言:javascript
复制
import .kk
kk.try_check('str')

在test.py并运行mypy test.py中,mypy将报告类型冲突。但是,如果您有,它不会报告冲突。

代码语言:javascript
复制
try_check('str')

在kk.py中。

如果在函数定义中显式地写入键入提示,则可以在包含函数定义的程序中键入check函数。例如,您可以编写

代码语言:javascript
复制
def try_check(a: int):
    pass

try_check('str')

在kk.py和mypy kk.py中。Mypy将报告类型冲突。

票数 18
EN

Stack Overflow用户

发布于 2022-05-20 23:31:07

正如所接受的答案所提到的,不幸地 Mypy在运行mypy X.py时没有对X.py本身使用X.pyi存根文件。

本报告还讨论了这一问题:

https://github.com/python/mypy/issues/5028

我找到的唯一检查模块本身的解决方案是使用mypy.stubtest

存根文件的一个常见问题是它们往往与实际实现不同。Mypy包括最顽固的工具,它可以在运行时自动检查存根和实现之间的差异。

使用很简单,只需运行python -m mypy.stubtest X (X是没有.py扩展的模块的名称)

示例:

代码语言:javascript
复制
$ python3 -m pip install mypy

$ cat library.py
x = "hello, stubtest"

def foo(x=None):
    print(x)

$ cat library.pyi
x: int

def foo(x: int) -> None: ...

$ python3 -m mypy.stubtest library
error: library.foo is inconsistent, runtime argument "x" has a default value but stub argument does not
Stub: at line 3
def (x: builtins.int)
Runtime: at line 3 in file ~/library.py
def (x=None)

error: library.x variable differs from runtime type Literal['hello, stubtest']
Stub: at line 1
builtins.int
Runtime:
hello, stubtest
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37537194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档