问题标签 [pyright]

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 投票
0 回答
95 浏览

python-typing - 如何显示和忽略 Pyright 错误代码

我正在使用 pyright 类型检查器,并且需要抑制警告,例如 numpy 类型存根不足以推断出正确的类型。这可以通过#type: ignore注释来完成。但是,我希望任何其他问题仍能在同一行突出显示。例如,mypy提供show_error_codes选项提供错误代码,我可以将其附加到 type:ignore 注释以仅抑制此特定问题。

我在文档https://github.com/microsoft/pyright/blob/main/docs/configuration.md中找不到这样的选项。pyright 是否可以显示/忽略特定的错误代码?

0 投票
0 回答
71 浏览

python - Pyright 类型错误与 Flask 错误处理程序

我正在努力使用 Pyright 进行严格的类型检查,但我遇到了 Flask 错误处理程序的问题。我对类型提示还不够熟悉,无法知道这是否是我的代码、Pyright 或 Flask 的类型提示中的错误。

这是引起我问题的代码:

上面的代码在 VSCode 中生成了这种类型的错误:

我可以通过向我的错误处理程序添加显式返回类型来改进问题:

这将删除先前的错误并将其替换为以下错误:

所以我查看了 flask.typing.ResponseValue 类型。它是这样定义的联合类型:

作为一个实验,我flask.typing在我的虚拟环境中修改了版本并添加str了可能的值。这消除了所有错误。

为什么 str 和 AnyStr 在这里不兼容?在我看来, AnyStr 应该能够接受 str 值。

如果这不是我的代码的问题,是 Flask 还是 Pyright 问题?

谢谢!

0 投票
0 回答
27 浏览

python - 有没有办法在 pyright 中将变量标记为常量/不可更改?

我试过谷歌搜索,但我还没有找到一种方法来使用类型注释将变量标记为 pyright 中的常量。我认为常量类型更像是标量常量,而不是 C/C++ 关键字 const。

任何想法表示赞赏。

谢谢。

0 投票
0 回答
46 浏览

python - 签名中具有重叠类型提示的重载函数会导致 mypy 错误,但不会导致 pyright

以下面的代码示例为例:

基本思想是my_func使用特定字符串调用if'bacon''eggs'返回类型应为float. 如果使用任何其他字符串,则返回类型应为bool.

直观地说,我希望在不太具体的注释之前首先检查更具体的注释 ( ) 。foo: SpecificStrings: str

但是,当使用 键入检查此文件时mypy,我收到一个错误:

t.py:6:错误:重载的函数签名 1 和 2 与不兼容的返回类型重叠

此外,当使用 进行类型检查时pyright,没有发现错误。

似乎这可能是 中的错误、中mypy的错误pyright,或者可能是其他东西...... PEP484似乎没有表明在这种情况下应该是什么行为。

是否有另一种方法来键入这种情况,使其工作(也就是说,xy上面的例子中,和被理解为它们各自的类型floatbool)与mypy


编辑:

有趣的是,使用Enum而不是Literal似乎是一种解决方法:

reveal_type()在这种情况下,与 pyright 和 mypy 一起使用会显示正确的类型。

对我来说,这引出了另一个问题:为什么Enum有效但无效Literal

然而,令人沮丧的是,PyCharm 并没有做同样的事情:

pycharm坏类型

0 投票
0 回答
15 浏览

python-3.x - 修复 Pyright 错误:“Literal['Dispatch__'] 和“_T@filter”类型不支持运算符“in”

我有一行代码不断被 Pyright 标记,我不确定如何重写这行代码:

Pyright 说:

该代码按预期工作,所以我不确定它试图保护我免受什么侵害。

0 投票
1 回答
27 浏览

node.js - 如何在 ubuntu 20.04 上安装 pyright?

我想在我的 ubuntu 上安装 pyright。为此,我首先安装了 npm(最新版本):

但是当我安装一个 pyright 时,我得到了这些错误:

你能告诉我这是否可以以某种方式解决吗?

0 投票
0 回答
20 浏览

python - 让 pyright/PyCharm 识别装饰器设置的参数

我有以下装饰器函数(serialize_requestfrom的简化版本api-client-pydantic),它应该用于将任意数量的pydantic模型作为参数的函数。它使用传递给它的参数初始化这些模型,然后使用这些模型作为参数调用包装函数。

通过覆盖签名,像 ipython 这样的工具可以识别新参数并在弹出帮助中显示它们。例如,具有以下模型和功能:

在 PyCharm 中: 在此处输入图像描述

在纯 ipython 中: 在此处输入图像描述

但 pyright 无法识别它们并显示错误:

在此处输入图像描述

我不知道 PyCharm 在内部使用什么,但它也无法识别新参数。但它没有显示错误,它只接受任何有效参数,也没有任何参数:

在此处输入图像描述

现在,我的问题是,是否有某种方法可以让 pyright/PyCharm 和类似工具识别装饰器设置的那些“新”参数,并使它们表现得好像参数是直接在函数上设置的一样。