【问题标题】:Suppress Pylance type annotation warning in VS Code抑制 VS Code 中的 Pylance 类型注释警告
【发布时间】:2021-08-28 02:18:43
【问题描述】:

在我工作的公司,我们使用类型注释来定义函数的预期返回类型。大多数开发人员都在使用 PyCharm,但我更喜欢坚持使用 VS Code。

VS Code IDE 中的以下行:

def example() -> [str]:

引发 Pylance 警告:

List expression not allowed in type annotation
  Use List[T] to indicate a list type or Union[T1, T2] to indicate a union typePylance

并希望我使用:

def example() -> List[str]

虽然修复此问题需要我检查整个代码库,并且不会被拉取请求接受。

这种类型的类型注解在 Python 3.10 中是允许的(我不是 100% 确定),但在我们当前使用的 Python 3.7 中是不允许的。因为我可以忍受这个警告,所以我想压制它。

【问题讨论】:

  • 为什么要忍受糟糕的编辑器设置?工具应该为你工作,而不是你为工具工作
  • 我之前没见过这种风格的类型注解。我知道从 Python 3.9 开始,现在允许使用这种类型注释 list[str],即使用参数化泛型,但我之前没有见过 [str]。团队中的每个人都使用相同的类型注释吗?
  • @pavel 是的,团队中的每个人都在使用[str],我不介意,因为它更短并且可以解决问题。我想这就是为什么它在未来的版本中被允许的原因。

标签: python visual-studio-code vscode-settings pylance


【解决方案1】:

Pylance 支持PEP 484

存在许多与类型提示不兼容的函数注释的现有或潜在用例。这些可能会混淆静态类型检查器。然而,由于类型提示注解没有运行时行为(除了对注解表达式求值并将注解存储在函数对象的 _annotations_ 属性中),这不会使程序不正确——它只是可能导致类型检查器发出虚假的警告或错误。

要标记不应被类型提示覆盖的程序部分,您可以使用以下一项或多项:

a#类型:忽略评论;
类或函数上的 @no_type_check 装饰器;
用@no_type_check_decorator 标记的自定义类或函数装饰器。

或者,您可以在项目的根目录中为Pyright(Pylance 在下面使用)或pyproject.toml 创建一个pyrightconfig.json,并指定要忽略的错误类型。您可以在显示错误消息的悬停小部件中查看错误类型。

pyrightconfig.json 示例:

{
        "reportGeneralTypeIssues": false,
}

pyproject.toml 示例:

[tool.pyright]
reportGeneralTypeIssues = false

更多信息请参见Type Check Diagnostics Settings。

【讨论】:

  • 此解决方案需要在整个代码库中添加代码,我不喜欢这样,并且不会被拉取请求接受。
  • @Joep 我已经编辑了答案,据我所知,这是仅有的两个选项。 VSCode 的 settings.json 中没有特定于 pylance 的设置。
  • 感谢编辑,我已经尝试了两种解决方案,但错误仍然存​​在。也许它不是报告GeneralTypeIssues?我想我们很接近了
  • @Joep 在我的 VSCode 中,您的示例函数的错误之一是 reportGeneralTypeIssues,所以我以它为例,其余可能的错误类型在我链接的文档中提到。跨度>
猜你喜欢
  • 2013-08-02
  • 2013-04-08
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2011-03-16
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多