问题 隐藏一些可能没有成员的Pylint错误


下列 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了解?或者我怎么能告诉它函数的结果可以有除int之外的其他类型?或者我怎么能告诉它忽略那条特定的线? (我赞成按此顺序回答问题)


9080
2017-10-30 15:36


起源

除了<int>之外,您期望拥有哪些类型? (Str或bin ..) - user3378649
array 和 int 够了 - Liviu
顺便说一句,您使用的是哪个版本的Python!您只能在Python +3.2中使用.tobytes() - user3378649
@ user3378649标签已添加 - Liviu
如果你之前检查类型怎么办? if isinstance(result,int)== False:read = result.tobytes() - user3378649


答案:


由于某种原因,pylint没有得到'结果'可能是数组类型(并且肯定会在'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()

17
2017-10-31 06:19



另外一个注释:在行上方添加指定的注释会禁用整个块的警告(docs.pylint.org/...) - Liviu


代替

result.tobytes(), 

使用

getattr(result, 'tobytes')()

-1
2017-09-10 02:47



将代码更改为更慢以使pylint快乐并不符合练习的精神。目标是通知代码可以做得更好。我总是遇到这种情况,并希望pylint提供类型提示或使用eeStructured文本或其他文档评论策略来获取提示,但缺少此功能,禁用绝对是唯一的解决方案(假设代码确实已经干净)。 - Rafe