问题标签 [mypy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 使用 TypeVar 在 MyPy 中使用参数键入装饰器会产生预期的无人居住类型
Callable
*args
MyPy 与and有一些问题**kwargs
,尤其是关于装饰器的问题,详见:https ://github.com/python/mypy/issues/1927
具体来说,对于只包装函数(并且不更改其签名)的没有参数的装饰器,您需要以下内容:
最后cast()
的应该是不必要的(MyPy 应该能够通过调用func
最后wrapped
包装的 is来推导出它FuncT -> FuncT
)。我可以忍受这个,直到它被修复。
但是,当您引入带参数的装饰器时,这会非常糟糕。考虑装饰器:
这是这样使用的:
我们可能会尝试输入它(使用 Guido 认可的无参数示例作为指南),如下所示:
这似乎是类型检查,但是当我们使用它时:
我们得到一个严重的错误:
我对这怎么可能有点困惑。正如PEP 484中所讨论的,它似乎Callable[[int, int], int]
应该是Callable[..., Any]
.
我认为这可能是在返回类型 ofprint_on_call
和 aa 参数和返回类型 to之间使用泛型之间的错误迭代decorator
,所以我将我的示例缩减到最低限度(尽管不再是一个工作装饰器,它仍然应该进行类型检查):
但是,这仍然会导致上述错误。这本来是我可以接受#type: ignore
的,但不幸的是,由于这个问题,任何用这个装饰器装饰的函数都有 type <uninhabited>
,所以你开始到处失去类型安全。
这一切都说(tl; dr):
您如何使用参数键入装饰器(不修改函数的签名)?以上是bug吗?可以解决吗?
MyPy 版本:0.501(截至本文发布时的最新版本)
python - 在 mypy 中提取可调用对象的类型
假设我有这些功能:
我有一个规范的回调,所以我希望能够执行以下操作:
除了实际上没有做我想做的事情之外,reveal_type
它本身不是 PEP 484 的一部分,所以我不能使用它。
python - type() 函数没有为 boto3 sqs 对象返回正确的结果?
我正在使用 Python 3 的类型提示语法,并且正在编写一个使用 SQS 的小型 AWS 应用程序。我试图暗示队列的类型。这就是我获取队列类型的方式:
我这样写我的类型提示函数:
但我收到一个错误:
我自己使用dir(...)
. 似乎factory
确实不包含sqs
。因此,我有两个问题:
- 为什么要
type
返回这个不存在的类? - 如何找到该对象的正确类型?
python - 如何使用 mypy 键入检查 PyQt5 应用程序?
我尝试使用 mypy 对 PyQt5 应用程序的代码进行类型检查。但我发现它不会检查我定义的小部件类中的代码。我编写了一个小示例应用程序来找出检查的内容和不检查的内容。
如果我运行 mypy,我会得到以下输出:
Mypyadd_numbers2()
在我尝试将两个整数传递给add_numbers()
仅将字符串作为参数的函数的主要部分中发现了类型错误和错误。但是由于某种原因,函数MyWidget.add_number()
中的错误已被跳过。mypy 忽略__init__()
了类中的所有内容。MyWidget()
有人知道如何使 mypy 完全检查代码吗?
python - 添加类型信息而不依赖于类型模块
我一直在向我的包.py
文件添加类型信息,以支持mypy
针对包运行。除其他外,还允许为此第三方包生成类型信息。
由于我的包必须与 Python 2.7 兼容,因此我对类型信息使用注释:
但为了运行mypy
这需要我导入输入:
这会导致两个问题:
这不适用于 Python 3.5.0 和 3.5.1,因为它有一个模块
typing
,但不包括Text
. 从 PyPI安装typing
并不能解决这个问题。(并且有些用户在该版本的 Python 上运行该包)。这使我的包依赖于
typing
2.7/3.3/3.4 安装,需要额外的下载和安装。我
Union
定义了自己的类型:必须根据输入是否可用,有条件地执行此代码。
对于第一个问题,由于我不在mypy
Python 3.5.0/1 下运行,我可以执行以下操作:
但这并不能解决第二个问题。
注释掉import
,例如注释中的类型信息,
会导致mypy
抛出错误Name 'Text' is not defined
。
第三个问题可以通过使用try
- except
(丑陋,而且可能效率低下)或例如通过测试环境变量(也可以用来解决第一个问题)来解决。
运行时是否设置了环境变量mypy
,我可以对其进行测试,以便仅在运行时执行导入语句mypy
?针对环境变量进行测试还可以让我将自己类型的定义放在“受保护的”范围内。
还是其他解决方案?
python - Python >=3.5:在运行时检查类型注释
模块(或任何其他模块)是否typing
展示了在运行时对变量进行类型检查的 API,类似于isinstance()
但理解中定义的类型类typing
?
我想运行类似于:
python - Mypy 错误 - 分配中的类型不兼容
我的函数看起来像这个简化的代码示例:
当我运行 Mypy(0.52 版)时,我收到此错误:
并且错误指向我的代码示例中的倒数第二行。为什么 mypy 返回此错误?我的代码是无效的(以任何方式)还是这是一些 mypy 错误?
python - 将类型指定为数字列表(整数和/或浮点数)?
我如何指定一个函数可以获取可以是整数或浮点数的数字列表?
我尝试使用 Union 制作一种新类型,如下所示:
但是,mypy 不喜欢这样:
是否有包含整数和浮点数的类型?
python - mypy 错误 - 尽管使用了“Union”,但类型不兼容
考虑以下代码示例:
针对此代码运行 mypy 时,返回以下错误:
而且我不确定如何在不使用Dict[str, Any]
第一个函数中的返回类型或安装“TypedDict”mypy 扩展的情况下避免此错误。mypy 实际上是“正确的”吗,我的任何代码都不是类型安全的,还是应该将其视为 mypy 错误?