我的系统中有一个类,它表示远程系统的 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()