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

How do you ignore specific Pyright type checks by project, file, line?

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

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

提前感谢您分享此信息。

通常的 mypy in-line 注释,如 # type: ignore 应该可以工作(see details), and for pyright specific config, you can put a pyrightconfig.json in your project root. You can find available config options here。它只是一个 JSON 文件,所以它看起来像这样:

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

编辑:

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

要使用评论中提到的 import 的具体示例,这里有两个变体:

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

from missing_module import name  # type: ignore

我提供的 mypy 文档的 link 以及从那里编辑的 list of error codes link 中都讨论了这些内容。

pyright 特定配置只能在项目范围内,通过在 pyproject.toml 文件的 [tool.pyright] 部分中指定它们,或者像上面那样创建 pyrightconfig.json在您的 top-level 项目目录中。

编辑2:

OP 在评论中提出了如何找到与 pyright 配置选项对应的 mypy error-codes 的问题。不幸的是,除了通读文档以及对语言的一些理解之外,没有简单的方法;例如在 from os import name 的情况下, Python 实际上是将模块 object os 的属性 os.name 导入当前命名空间。下面的互动 session 应该清楚这一点:

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