14

我正在使用 pyre-checking 进行静态类型测试,我想忽略我项目中的特定错误。

例如:未定义属性[16]:模块google.protobuf.struct_pb2没有属性_STRUCT

假设如果我想从我的项目中忽略这个错误,我该怎么做?

4

4 回答 4

6

我不熟悉您的项目,但您有更多选择。我想你可以选择适合你的。

您可以使用以下注释掉的行来抑制代码中的特定错误:

# pyre-ignore[16]:
That part which raises the error

或者

That part which raises the error  # pyre-ignore[16]

如果在 Python 文件的开头声明以下注释掉的行,则可以抑制文件中的所有错误:

# pyre-ignore-all-errors

您可以使用正则表达式排除有问题的文件或文件(不完全推荐,因为其他错误也会被抑制)。

你可以通过两种方式做到这一点:

  1. exclude参数放入 PyRe 配置文件 ( .pyre_configuration)
  2. exclude在命令行中使用参数 ( --exclude EXCLUDE Exclude files and directories matching this regexp from parsing)

老实说,我认为您想完全禁用Undefined attribute [16]分析中的错误,但不幸的是目前 PyRe 不支持此选项。也许如果你重写 PyRe 实现的某些部分,你可以达到它,但它不是很好,我想这不是一个选择。

参考资料:

于 2020-08-19T08:17:57.750 回答
1

我相信您可以在文档中找到您要查找的内容。所以你需要做的是根据文档写一个具体的评论。在你的情况下,这样的事情会有所帮助:

# pyre-ignore[16]
here will be the line of code causing the error
于 2020-08-18T10:11:29.480 回答
1

另一种选择是修复此错误而不是抑制它。

.py当您使用文件中存在但未在相应文件中定义的类或属性或函数时,会发生此类错误.pyi。换句话说,此类错误发生在源代码和类型提示存根之间的不一致处。在您的情况下,_STRUCT该类在 中定义struct_pb2.py,但未在.pyiPyre 开发人员提供的文件中定义,即/pyre_check/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi.

在这种情况下,您可以尝试.pyi从相应包的开发人员处获取文件并替换 pyretypeshed目录中的文件。但是,.pyi包的开发者提供的文件通常不会注释以 . 开头的类或方法_。根据PEP 8 -- Python 代码样式指南 | Python.org保留以单个下划线开头的名称供内部使用

_single_leading_underscore:弱“内部使用”指标。例如,from M import * 不会导入名称以下划线开头的对象。

为通过 from M import * 使用而设计的模块应使用 all机制来防止导出全局变量,或使用在此类全局变量前加下划线的旧约定(您可能希望这样做以指示这些全局变量是“模块非公共”)。

仅对非公共方法和实例变量使用一个前导下划线。

公共属性不应有前导下划线。

内部接口(包、模块、类、函数、属性或其他名称)仍应以单个前导下划线作为前缀。

如果您无法从开发人员那里获得更新的 .pyi 文件,或者它不包含带有下划线前缀的名称定义,您可以自己将这些名称添加到 Pyre 开发人员提供的 .pyi 文件中。

Errors |还有一个小提示。Pyre (pyre-check.org)

于 2021-04-21T18:50:29.897 回答
0

花了太多时间挖掘,最终直接向我指出,但您可以在文件顶部抑制给定类型的所有错误:

# pyre-ignore-all-errors[16]
# pyre-ignore-all-errors[56]
于 2021-05-05T20:07:45.910 回答