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

python-3.x - 如何将 coc-pyright 设置为不对方法中未使用的 self 参数发出警告?

我在 neovim 中使用 CoC 的 coc-pyright 扩展。

在某些情况下,我们在类中有一个不需要访问自身变量的实例方法。例如,我可能在__init__方法中有一些变量不需要在类中的其他任何地方访问。作为一个玩具示例,请考虑,

现在,这里 pyright 警告我self未访问。有没有办法让 Pyright 在这种情况下不发出警告?

PS 被传递的变量是一个特定于实例的变量。所以self需要使它成为一个实例变量,对吧?

0 投票
0 回答
421 浏览

python - 如何在容器中将 coc-pyright 与 python 环境一起使用?

我想在 docker 容器中使用 python 环境,同时在主机上编辑源文件。我知道 VSCode 提供了devcontainer功能,但我想使用 VIM 和 coc-pyright。怎么做?

0 投票
1 回答
167 浏览

python - pyright:在具有最小值/最大值的同质列表中使用 TypeVar

我试图了解如何使用TypeVarpyright。

我构建了以下小功能:

它使 pyright 在线抱怨:

因为:

“min”的重载与提供的参数不匹配

  参数类型:(TypedList[int], TypedList[int])

[版权:reportGeneralTypeIssues]

此外,它还抱怨:

因为:

预期的类类型,但收到“int”

和:

非法类型注释:除非是类型别名,否则不允许使用变量

mypy 似乎在这条线上工作得很好。关于问题是什么以及如何解决问题的任何想法?

谢谢!

0 投票
0 回答
453 浏览

python - 如何处理来自导入模块的未知类型的函数/方法

我想知道处理与其他模块相关的未知类型的函数/方法的最佳方法是什么。请注意,我正在使用strict模式

例如,我有以下内容:

mongo_clientMongoClient只是从导入的一个实例pymongo。VSCode 尖叫它不知道distinct方法的类型:

我可以做什么:

  • 添加reportUnknownMemberTypepyrightconfig.json; 但是,虽然这会删除之前的警告,但它也会禁用我可能真正想要的警告
  • 加上# type: ignore那个独特的电话;我通常讨厌有这样的无视评论,我认为它不会“修复”任何事情
  • 自己创建一个存根文件

你会怎么做?我不应该使用strict模式吗?大多数项目都是在激活严格模式的情况下编写的,以确保我没有遗漏任何东西。这些是cast我能做的吗?

谢谢!

0 投票
2 回答
433 浏览

python - 包含常量的模块的类型提示

我有一个 config.py 文件,其中包含一个常量列表,例如:

在另一个文件中,我将此文件作为模块导入,然后将其作为参数传递给其他函数。我使用 ModuleType 作为此参数的类型。

问题是当我运行 pyright linter 时,它报告了一个错误:

键入提示配置以避免这些错误的正确方法是什么?谢谢!

0 投票
1 回答
366 浏览

python - 来自父兄弟的 Pyright 导入导致缺少导入

我正在尝试运行一个 django 应用程序,这是以下结构(最小复制):

urls.py我有以下导入:from monitoring.api import MonitoringConfigurationAPIView. 但是,这会导致 Pyright 错误[Pyright reportMissingImports] [E] Import "monitoring.api" could not be resolved

添加说明符以查看父目录 ( from ..monitoring.api ...) 会使 Pyright 静音,但会导致 Python 本身出错:

我尝试__init__.py在根目录中添加一个空白,但这没有帮助。pyrightconfig.json我尝试在根目录( )中创建一个文件root/pyrightconfig.json并设置根目录,但这也不起作用。

它可以处理的所有外部包都很好,没有问题。只有本地是一个问题。我错过了什么吗?

0 投票
1 回答
44 浏览

python - 是否可以在 Python 中将通用 C[T] 静态类型为 T ?

我正在使用 SQLite,其中类型提示仍然远非完美,我最终得到了一个我认为我想做的 MCVE,它可能与静态类型的 ABC 有关。

例子:

我尝试使用 ABC,但由于它们似乎使用 ABC.register() 进行注册,因此类型检查器不知道我在说什么。

我也尝试过通用协议,但我必须设计一个协议来保护每种类型 T 所期望的功能。

我正在使用 Pyright/Pylance 对此进行测试,但如果这是问题的一部分,则可以将替代方案视为答案。

我还发现https://github.com/antonagestam/phantom-types根据文档,“不会增加任何处理或内存开销”。这并不完全正确,因为它们__instancecheck__在运行时通过 .parse 和协议(尽管它们在技术上不会创建任何新对象,但它们在堆栈帧中确实有一些开销)。

唉,这不是一个静态检查器,虽然那里的解决方案似乎用来assert isinstance("hello", MyStr)确保类型检查器可以在该行之后满足此类保证(这至少在 mypy 和 pylance 中有效),但它不会触发任何类型检查时间错误与assert isinstance("hello", MyInt). 该代码将在运行时使断言失败。

最终,我希望能够拥有一个T可以调用的类型,C[T]这样当我col_name = Column(String, ...)在模型中声明 a 时,我就可以col_name = "value"对其进行静态检查或对其进行一些变体。

这可能吗?如果是,那么魔法在哪里?

0 投票
0 回答
45 浏览

python - 如何使用 Pyright 运行代码类型检查的 Python 代码?

我已经安装了 Pyright 用于对我的 Python 代码进行类型检查,但我不确定如何运行它。例如,这是我的代码

当我尝试使用 , 运行它时pythonpython typed.py它给了我以下错误:

我已经浏览了文档,但没有找到编译或运行代码的选项。如何运行这些键入的 Python 代码?

0 投票
1 回答
283 浏览

python - 如何使用同时支持简单类型和属性的字段声明协议?

(相关,但不重复:How to annotate that can be implemented as property?

我想创建一个Protocol,其中一个字段可以通过简单的类型和属性来实现。例如:

但是上面的代码没有类型检查。我应该如何解决它?

注意:我想在不重写Fooand的情况下解决这个问题Bar,因为FooandBar不是我实现的。

根据这个问题,下面的代码不是解决方案,因为只读property和简单成员的语义略有不同。

Protocol由于差异,Pyright 否认了这一点。

0 投票
0 回答
136 浏览

python - 在派生类的重写方法中键入可选的命名参数

在运行时,以下代码完全有效:

这样做的好处是,在静态分析期间,如果您碰巧知道您有一个类型的变量,Derived您将获得额外的好处,即发现可选的命名参数optional_arg及其类型。

我认为这Derived是以兼容的方式覆盖get这里,但是,PyRight 说覆盖是不兼容的:

使用overload装饰器的尝试对我来说也失败了,所以我相信我也没有正确使用它:

给予:

有没有一种正确的方法来输入注释我想要实现的目标?即基类抽象方法对派生类的可选参数的名称和类型一无所知,但派生类可以公开特定的命名参数及其类型。