如何禁用或避免猴子修补对象的 pylint 警告:"'xxx' 的实例没有'yyy' 成员"



我的系统中有一个类,它表示远程系统的 RPC 接口。 它为每个 RPC 方法提供了一个方法。 这些方法是在运行时从 api 规范生成的。 所以我的代码看起来像:

class api:
    pass
for name, method in api_spec:
    setattr(api, name, method)

然后我有这样的电话:

x = api()
x.some_remote_call()

Pylint (v0.26.0) 在调用站点报告了以下内容:

[E1101, ...] Instance of 'api' has no 'some_remote_call' member

问题:有没有办法禁用或避免此警告?

我想避免注释每个调用;它在这个代码库中是不切实际的。 我的回退只是完全放弃警告 E1101,但除了这种情况之外,这是一个非常有用的警告。

理想情况下,我想以某种方式修改或注释 api 类,以告诉 pylint 不要生成警告。

这是一个可能的答案。 添加 getattr 方法会关闭 pylint:

class api:
    def __getattr__(self, name):
        raise AttributeError(name)
您还可以

使用 --ignored-classes 选项,该选项允许指定一些不应检查其成员的类。

您可以尝试使用正则表达式禁止显示警告。

import warnings    
warnings.filterwarnings('ignore', '.*Instance.*',)

其中 .** 您的关键字此处的关键字将触发忽略规则。

您可能需要使用正则表达式匹配字符串才能获得所需的效果。 您将需要输入最特定于实际警告的正则表达式匹配。 "实例"可能不是好的选择,因为您可能希望捕获"实例"的其他真实警告。 您也可以在传递代码块后重置此筛选器。

warnings.resetwarnings()

相关内容

最新更新