问题标签 [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 投票
2 回答
24 浏览

python-3.x - 由于 __init__ 中设置的默认值,如何避免类型检查器警告?

在我的应用程序中,有很多类的行为本质上是这样的:

do_something_with_subject()是始终在 之后调用的程序的不变量set_subject(),但我必须在知道将主题设置为什么之前创建类A,所以现在我在__init__(). 在 的情况下subject,唯一的逻辑默认值是None

现在解决问题:我的静态类型检查器(pyright)抱怨self.subject.do_stuff(). 既然它在__init__()那个subject可以看到None,它就告诉我那个do_stuff()不是会员None。一切都非常合理,除了这不是我希望看到的警告,因为我的程序是如何运行的。我也:

  • 就像在__init__(). 它为您提供了课程内容的概述,而且我还听说一些 IDE 会查看__init__()自动完成信息。
  • 不想在代码中使用特定于类型检查器的指令来消除此警告,因为我希望其他开发人员可以自由使用他们自己喜欢的类型检查器。
  • 不想subject用类似的东西进行注释,Any从而将其排除在类型检查之外。

在这种情况下,有什么方法可以让我吃蛋糕吗?继续subject接受类型检查审查,以某种方式声明它__init__(),而不是让类型检查器认为它可以None吗?

0 投票
0 回答
134 浏览

python - 如何处理外部库中的输入不足?

我喜欢使用 Python 中的打字功能以及静态类型检查,例如 pyright。不幸的是,并非所有库都是完全类型化的。例如,某些函数可能在运行时生成(因此缺失)或未指定函数返回类型,因为它取决于输入参数。

这些类型的函数显然会导致警告。您如何从类型检查器中解决这些类型的警告?

0 投票
0 回答
418 浏览

typescript - Neovim LSP:未找到语言服务器

我正在尝试设置 neovim 的新 LSP。

按照手册,我下载了插件 lspconfig、pyright 和 typescript 语言服务器,并在 my 中获取了设置init.vim,如下所示:

在有效的 root_dir(具有 package.json 和/或 setup.cfg,...)中打开一个.py或文件后,我没有收到代码错误,没有智能感知,并且显示 0 个客户端已连接。.ts:LspInfo

现在有一个问题:我使用yarn global,而不是安装语言服务器,npm -g并且我使用的是 asdf 版本管理器,因此它们的二进制文件可能不在预期的路径中。

LSP 是否在预定义的路径中搜索服务器?如果是这样,我该如何添加到这些路径?

0 投票
1 回答
1221 浏览

python - 你如何忽略项目、文件、行的特定 Pyright 类型检查?

我找不到关于如何忽略一项或多项特定Pyright检查的明确文档:

  1. 在项目的根目录中使用配置文件。
  2. 在文件、函数或方法的顶部。
  3. 每个线作为尾随注释。

提前感谢您分享此信息。

0 投票
2 回答
176 浏览

python - Vscode 使用 jedi + pyright 时两次显示函数文档字符串

我正在使用安装了 jedi 和 pyright 的 VSCodium(vscode 的开源版本)。这导致函数文档字符串显示两次(见附图),因为 jedi 和 pyright 都显示了它们。

有没有办法在不完全禁用绝地的情况下禁用绝地的这个单一功能?截屏

0 投票
0 回答
133 浏览

python - 如何为类键入注释装饰器?

我有以下代码:

我明白,在这种特殊情况下,我可以只编写B(Mixin)并避免使用装饰器,但实际上 中有很多逻辑add_mixin,它选择/自定义Mixin类(想想@dataclass)。

代码按您期望的方式工作:打印 1 和 2。但是,它使我蒙蔽了双眼pyright- 我不再可以跳转到bar,因为pyright不明WithMixin白继承自MixinB

此外,mypy以另一种方式感到困惑:

我正在注释现有库的核心,所以列表@overloads或一些彻底的魔法对我来说很好 - 我只是希望注释是正确的。

我想在两件事上得到一些帮助:

  1. 我如何正确注释add_mixin(或重写它以产生相同的效果)以便pyright/mypy正常工作?
  2. 有没有关于打字的综合资源?最好是解释typing模块的实现(这令人困惑!)以及类型检查器使用这些注释的方式。我已经阅读了有关 typing以及PEP 483PEP 484的参考资料,并且我认为我对所有协变/逆变/绑定类型的东西都有很好的掌握。然而,当有一个我以前从未见过的复杂案例时(比如这里),我感到完全迷失了。谷歌搜索大多会导致相同的参考风格或表面级文章(或 PEP)。

我经历了很多失败的尝试,最后一个是:

pyright在这条线上感到困惑type(cls.__name__, (cls, Mixin), {}),同时mypy说不允许继承Type[_T1](它不是,但我认为类型检查器可能会选择它)。

0 投票
0 回答
351 浏览

python - 为什么 Pyright 不能正确解析这个模块?

我正在使用安装在/opt/confd/src/confd/pyapi/.

$PYTHONPATH的设置为/opt/confd/src/confd/pyapi.

的输出python -c 'import sys; print(sys.path)'

所以我很确定 pyright 应该能够找到该模块。当我使用时python -i,我可以导入模块并很好地使用它。然而,像这样运行 pyrightpython -m pyright oss_confd_manager.py --verbose会导致这个结果(向右滚动查看我的注释):

我不确定为什么会这样。我想我不完全理解模块是如何解决的。我以为既然模块在搜索路径中,pyright应该能找到它。此外,我可以在交互式解释器中导入模块,但 pyright 不知道是什么,这对我来说很奇怪_confd.dp

如何获得 pyright 以正确检测此模块并导入它?

0 投票
1 回答
87 浏览

python - exec() 赋值后的 Python 类型提示

我经常遇到这样的情况,我使用 exec 进行分配,如下所示:

someClassInfo的实例在哪里SomeClass。然后我使用someClassInstance,像这样:

所有这些都很好,我完成了我想要的。

但是,从阅读的角度和 IDE(在我的例子中是 emacs+pyright)的角度来看, someClassInstance 的(非运行时)类型是未知的。

所以,我添加了“# type:ignore”。

但是,相反,我想以某种方式使用 python 3 的类型提示来让它知道 someClassInstance 是 SomeClass 类型(或其祖先之一)。

那可能吗?

0 投票
1 回答
29 浏览

python - 如何在python中的两种类型别名之间进行转换?

我正在尝试在 python 中执行以下操作:

如何使类型检查器即 pyright 允许此分配?

0 投票
2 回答
82 浏览

python - 将字符串联合起来用作可能的字典键

我有一些 Python 3.7 代码,我正在尝试向其中添加类型。我要添加的一种类型实际上是Union几个可能的字符串之一:

这里的问题是 Pyright 抱怨PossibleKey. 它说:

“水果没有定义”

我想让 Pyright/Pylance 工作。

我已经from enum import Enum从另一个 SO 答案中检查了模块,但是如果我尝试这样做,我最终会遇到更多问题,因为我实际上是在处理 aDict[str, Any]而不是Enum.

表示我的类型的正确 Pythonic 方式是什么?