问题标签 [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.
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
吗?
python - 如何处理外部库中的输入不足?
我喜欢使用 Python 中的打字功能以及静态类型检查,例如 pyright。不幸的是,并非所有库都是完全类型化的。例如,某些函数可能在运行时生成(因此缺失)或未指定函数返回类型,因为它取决于输入参数。
这些类型的函数显然会导致警告。您如何从类型检查器中解决这些类型的警告?
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 是否在预定义的路径中搜索服务器?如果是这样,我该如何添加到这些路径?
python - 如何为类键入注释装饰器?
我有以下代码:
我明白,在这种特殊情况下,我可以只编写B(Mixin)
并避免使用装饰器,但实际上 中有很多逻辑add_mixin
,它选择/自定义Mixin
类(想想@dataclass
)。
代码按您期望的方式工作:打印 1 和 2。但是,它使我蒙蔽了双眼pyright
- 我不再可以跳转到bar
,因为pyright
不明WithMixin
白继承自Mixin
和B
。
此外,mypy
以另一种方式感到困惑:
我正在注释现有库的核心,所以列表@overloads
或一些彻底的魔法对我来说很好 - 我只是希望注释是正确的。
我想在两件事上得到一些帮助:
- 我如何正确注释
add_mixin
(或重写它以产生相同的效果)以便pyright
/mypy
正常工作? - 有没有关于打字的综合资源?最好是解释
typing
模块的实现(这令人困惑!)以及类型检查器使用这些注释的方式。我已经阅读了有关 typing以及PEP 483和PEP 484的参考资料,并且我认为我对所有协变/逆变/绑定类型的东西都有很好的掌握。然而,当有一个我以前从未见过的复杂案例时(比如这里),我感到完全迷失了。谷歌搜索大多会导致相同的参考风格或表面级文章(或 PEP)。
我经历了很多失败的尝试,最后一个是:
pyright
在这条线上感到困惑type(cls.__name__, (cls, Mixin), {})
,同时mypy
说不允许继承Type[_T1]
(它不是,但我认为类型检查器可能会选择它)。
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 以正确检测此模块并导入它?
python - exec() 赋值后的 Python 类型提示
我经常遇到这样的情况,我使用 exec 进行分配,如下所示:
someClassInfo
的实例在哪里SomeClass
。然后我使用someClassInstance
,像这样:
所有这些都很好,我完成了我想要的。
但是,从阅读的角度和 IDE(在我的例子中是 emacs+pyright)的角度来看, someClassInstance 的(非运行时)类型是未知的。
所以,我添加了“# type:ignore”。
但是,相反,我想以某种方式使用 python 3 的类型提示来让它知道 someClassInstance 是 SomeClass 类型(或其祖先之一)。
那可能吗?
python - 如何在python中的两种类型别名之间进行转换?
我正在尝试在 python 中执行以下操作:
如何使类型检查器即 pyright 允许此分配?
python - 将字符串联合起来用作可能的字典键
我有一些 Python 3.7 代码,我正在尝试向其中添加类型。我要添加的一种类型实际上是Union
几个可能的字符串之一:
这里的问题是 Pyright 抱怨PossibleKey
. 它说:
“水果没有定义”
我想让 Pyright/Pylance 工作。
我已经from enum import Enum
从另一个 SO 答案中检查了模块,但是如果我尝试这样做,我最终会遇到更多问题,因为我实际上是在处理 aDict[str, Any]
而不是Enum
.
表示我的类型的正确 Pythonic 方式是什么?