【问题标题】:How do you ignore specific Pyright type checks by project, file, line?你如何忽略项目、文件、行的特定 Pyright 类型检查?
【发布时间】:2021-08-17 18:53:27
【问题描述】:

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

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

提前感谢您分享此信息。

【问题讨论】:

  • 你查看配置文档了吗?
  • 通常的mypy in-line cmets 应该可以工作,对于pyright 特定配置,您可以在项目根目录中放置pyrightconfig.json。您可以找到可用的配置选项here
  • @gshpychka 它确实涵盖了您项目根目录的配置文件,但据我所知,它没有涵盖我的其他两个项目符号。
  • 谢谢@suvayu,你能发布一个mypy指令的确切语法示例吗?
  • 我添加了我的评论以及您要求的示例作为答案。希望这会有所帮助。

标签: python pyright


【解决方案1】:

# type: ignore 这样的常用 mypy 内联 cmets 应该可以工作 (see details),对于 pyright 特定配置,您可以在项目根目录中放置 pyrightconfig.json。您可以找到可用的配置选项here。它只是一个 JSON 文件,所以看起来像这样:

{
    "venvPath": "/home/username/.virtualenvs/",
    "venv": "myenv",
    "reportOptionalSubscript": false,
    "reportOptionalMemberAccess": false
}

编辑:

源内配置只能作为mypy 支持的类型忽略语句。 # type: ignore 不是其他东西的占位符,它是字面意思。缩小范围并忽略特定错误(它只能是mypy 错误代码之一),如下所示:# type: ignore[error-code]

要使用cmets中提到的import的具体例子,这里有两种变体:

from os import non_existent  # type: ignore[attr-defined]

from missing_module import name  # type: ignore

这一切都在我提供的mypy 文档的链接以及从那里链接的list of error codes 中进行了讨论。

pyright 特定配置只能是项目范围的,可以通过在 pyproject.toml 文件的 [tool.pyright] 部分中指定它们,或者通过在顶级项目目录中创建像上面一样的 pyrightconfig.json

EDIT2:

在 cmets 中,OP 提出了如何找到与 pyright 配置选项对应的 mypy 错误代码的问题。不幸的是,除了彻底阅读文档以及对语言有所了解之外,没有其他简单的方法。例如在from os import name 的情况下,Python 实际上是将模块对象os 的属性os.name 导入到当前命名空间中。以下交互式会话应该清楚地说明这一点:

In [1]: import os

In [2]: type(os)
Out[2]: module

In [3]: locals()["curdir"]
-------------------------------------------------------------------
KeyError                          Traceback (most recent call last)
<ipython-input-3-a31c5782bef1> in <module>
----> 1 locals()["curdir"]

KeyError: 'curdir'

In [4]: from os import curdir

In [5]: locals()["curdir"]
Out[5]: '.'

In [6]: os.curdir == curdir
Out[6]: True

【讨论】:

  • 谢谢,@suvayu。我尝试了建议的单行忽略模板。 from absent_package import absent_module # reportMissingImports: ignore 这条线对我不起作用。带有 LSP-pyright 扩展的上下文 SublimeText 4。
  • @DouglasLassance 你误解了我写的内容。对于源内 cmets,您必须使用mypy(第一个链接)支持的类型忽略语句,并且 pyright 特定选项只能在配置文件中配置项目范围,可用选项在第二个链接。
  • 谢谢,@suvayu。目前还不清楚我必须使用 Mypy 代码来抑制 Pyright 消息。有没有可靠的方法来找到等价物。如何从reportMissingImportsattr-defined
  • @DouglasLassance 不幸的是没有简单的方法,我在回答中添加了一些解释,希望这能说明我是如何得出这个结论的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2014-05-30
  • 2019-08-10
相关资源
最近更新 更多