问题标签 [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.

0 投票
2 回答
5739 浏览

python-3.x - 使用 TypeVar 在 MyPy 中使用参数键入装饰器会产生预期的无人居住类型

Callable *argsMyPy 与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(截至本文发布时的最新版本)

0 投票
0 回答
457 浏览

python - 在 mypy 中提取可调用对象的类型

假设我有这些功能:

我有一个规范的回调,所以我希望能够执行以下操作:

除了实际上没有做我想做的事情之外,reveal_type它本身不是 PEP 484 的一部分,所以我不能使用它。

0 投票
0 回答
351 浏览

python - mypy 用 pyqt5 检查项目

我尝试使用mypy检查使用 pyqt5 的项目。为了使我的问题更清楚,我创建了合成示例,而不是我的代码:

当我运行mypy时,我得到:

我发现/usr/share/qt/qsci/api/python/PyQt5.api

这是mypy想要的吗?

我怎样才能告诉mypy使用/usr/share/qt/qsci/api/python/PyQt5.api

我也有/usr/lib/python3.6/site-packages/PyQt5/QtCore.pyi,这个文件可能是mypy想要的吗?

0 投票
1 回答
1280 浏览

python - type() 函数没有为 boto3 sqs 对象返回正确的结果?

我正在使用 Python 3 的类型提示语法,并且正在编写一个使用 SQS 的小型 AWS 应用程序。我试图暗示队列的类型。这就是我获取队列类型的方式:

我这样写我的类型提示函数:

但我收到一个错误:

我自己使用dir(...). 似乎factory确实不包含sqs。因此,我有两个问题:

  • 为什么要type返回这个不存在的类?
  • 如何找到该对象的正确类型?
0 投票
1 回答
722 浏览

python - 如何使用 mypy 键入检查 PyQt5 应用程序?

我尝试使用 mypy 对 PyQt5 应用程序的代码进行类型检查。但我发现它不会检查我定义的小部件类中的代码。我编写了一个小示例应用程序来找出检查的内容和不检查的内容。

如果我运行 mypy,我会得到以下输出:

Mypyadd_numbers2()在我尝试将两个整数传递给add_numbers()仅将字符串作为参数的函数的主要部分中发现了类型错误和错误。但是由于某种原因,函数MyWidget.add_number()中的错误已被跳过。mypy 忽略__init__()了类中的所有内容。MyWidget()有人知道如何使 mypy 完全检查代码吗?

0 投票
1 回答
695 浏览

python - 添加类型信息而不依赖于类型模块

我一直在向我的包.py文件添加类型信息,以支持mypy针对包运行。除其他外,还允许为此第三方包生成类型信息。

由于我的包必须与 Python 2.7 兼容,因此我对类型信息使用注释:

但为了运行mypy这需要我导入输入:

这会导致两个问题:

  1. 这不适用于 Python 3.5.0 和 3.5.1,因为它有一个模块typing,但不包括Text. 从 PyPI安装typing并不能解决这个问题。(并且有些用户在该版本的 Python 上运行该包)。

  2. 这使我的包依赖于typing2.7/3.3/3.4 安装,需要额外的下载和安装。

  3. Union定义了自己的类型:

    必须根据输入是否可用,有条件地执行此代码。

对于第一个问题,由于我不在mypyPython 3.5.0/1 下运行,我可以执行以下操作:

但这并不能解决第二个问题。

注释掉import,例如注释中的类型信息,

会导致mypy抛出错误Name 'Text' is not defined

第三个问题可以通过使用try- except(丑陋,而且可能效率低下)或例如通过测试环境变量(也可以用来解决第一个问题)来解决。

运行时是否设置了环境变量mypy,我可以对其进行测试,以便仅在运行时执行导入语句mypy?针对环境变量进行测试还可以让我将自己类型的定义放在“受保护的”范围内。

还是其他解决方案?

0 投票
3 回答
14111 浏览

python - Python >=3.5:在运行时检查类型注释

模块(或任何其他模块)是否typing展示了在运行时对变量进行类型检查的 API,类似于isinstance()但理解中定义的类型类typing

我想运行类似于:

0 投票
1 回答
26159 浏览

python - Mypy 错误 - 分配中的类型不兼容

我的函数看起来像这个简化的代码示例:

当我运行 Mypy(0.52 版)时,我收到此错误:

并且错误指向我的代码示例中的倒数第二行。为什么 mypy 返回此错误?我的代码是无效的(以任何方式)还是这是一些 mypy 错误?

0 投票
2 回答
32055 浏览

python - 将类型指定为数字列表(整数和/或浮点数)?

我如何指定一个函数可以获取可以是整数或浮点数的数字列表?

我尝试使用 Union 制作一种新类型,如下所示:

但是,mypy 不喜欢这样:

是否有包含整数和浮点数的类型?

0 投票
1 回答
4093 浏览

python - mypy 错误 - 尽管使用了“Union”,但类型不兼容

考虑以下代码示例:

针对此代码运行 mypy 时,返回以下错误:

而且我不确定如何在不使用Dict[str, Any]第一个函数中的返回类型或安装“TypedDict”mypy 扩展的情况下避免此错误。mypy 实际上是“正确的”吗,我的任何代码都不是类型安全的,还是应该将其视为 mypy 错误?