隐藏一些可能不存在的 Pylint 错误

34 投票
4 回答
41532 浏览
提问于 2025-04-30 15:51

下面这段 Python 代码被 Pylint 进行了分析:

if type(result) is array.array:
    read = result.tobytes()

... 最后一行出现了以下错误:

E:401,22: Instance of 'int' has no 'tobytes' member\ 
 (but some types could not be inferred) (maybe-no-member)

这里的 result 变量是从一个外部函数得到的。我该如何修改(纠正)代码,让 Pylint 理解呢?或者我该如何告诉它这个函数的结果可以是除了整数以外的其他类型?又或者我该如何让它忽略这一行?(我希望按照这个问题的顺序得到答案)

暂无标签

4 个回答

-8

不要使用

result.tobytes(), 

而是用

getattr(result, 'tobytes')()
1

在使用PyLint的时候,你可以通过在终端输入以下命令来生成一个配置文件:

$ pylint --generate-rcfile > .pylintrc

生成的这个文件会处理你需要检查的错误和警告。关于“没有成员”的问题,你可以去第560行查看,那里会告诉你被忽略了。这个配置会应用到你所有的代码文件上。你也可以编辑这个配置文件,以满足你的需求。

2

我通过在命令行中加了这个选项,关闭了所有的 no-member 警告。

--disable=E1101
64

出于某种原因,pylint 这个工具没有办法识别 'result' 可能是数组类型(而且在 'if' 这个分支下肯定是数组)。目前还没有办法告诉 pylint 这一点,不过希望将来能有这个功能。所以现在,你只能通过在有问题的那一行后面或者上面加上 # pylint: disable=maybe-no-member 来关闭这个警告。例如:

if type(result) is array.array:
    read = result.tobytes() # pylint: disable=maybe-no-member

或者

if type(result) is array.array:
    # pylint: disable=maybe-no-member
    read = result.tobytes()

撰写回答