【问题标题】:Hide some maybe-no-member Pylint errors隐藏一些可能没有成员的 Pylint 错误
【发布时间】:2014-10-30 15:36:54
【问题描述】:

Pylint 分析以下Python 片段代码:

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?或者我怎么能告诉它忽略那条特定的行? (我赞成按问题顺序回答)

【问题讨论】:

  • 除了,你还期望有哪些类型? (str 或 bin ..)
  • arrayint 就够了
  • 如果之前检查类型会怎样。 if isinstance(result, int) == False: read = result.tobytes()
  • @user3378649 不,但我更喜欢“isinstance(result, array.array)”,谢谢
  • @user3378649 我仍然有错误,只是我更喜欢isinstance 风格而不是type 比较。你不觉得我会坚持要一个正确的答案来奖励你吗?

标签: python python-3.4 pylint


【解决方案1】:

由于某种原因,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()

【讨论】:

  • 附加说明:在行上方添加指定的注释会禁用整个块的警告(docs.pylint.org/…
  • 以上评论中的链接已失效。 This 是更新后的链接。
【解决方案2】:

我通过将此命令行选项传递给 pylint 禁用了所有 no-member 警告

--disable=E1101

【讨论】:

  • 您不仅禁用了所有 E1101 警告,无论好坏,而且您必须记住每次使用命令时都添加此参数。
  • 嗯,它在我的 VS Code 配置中。您不是每次想要 lint 时都手动运行 linting 命令,对吗?您也可以将该选项添加到 pylint rc 文件中。
  • 配置更好,但仍然禁用所有。是的,我每次都会运行我的命令,因为我主要有脚本,而 Python 要么是一种爱好,要么是工作中的辅助测试工具(而且它们不配置 :( ...)
  • 我完全禁用了警告,因为我认为如果您的 linter 导致您在代码中添加任何内容(cmets 禁用它),这是一个糟糕的 linter,我宁愿没有警告而不是有误报..你用什么来编辑你的python程序?除非它是 Microsoft Word,否则您可能可以将 linter 配置为在每次保存并向您显示错误时通过编辑器运行。或者你可以安装最流行的代码编辑器 VS Code。
  • 麻烦的是“无成员”检查实际上确实捕获了很多胖手指代码问题。因此,完全禁用它(虽然很容易做到)也会让真正的问题通过,让我的生活变得更加艰难。使用最新的 pylint 版本,我发现误报不会经常出现。当他们这样做时,我只是评论禁用他们。
【解决方案3】:

代替

result.tobytes(), 

使用

getattr(result, 'tobytes')()

【讨论】:

  • 将代码更改为更慢以使 pylint 开心不符合练习的精神。目标是让代码变得更好。我一直遇到这个问题,希望 pylint 能提供类型提示或使用 eeStructured 文本或其他文档注释策略来获得提示,但缺少此功能,禁用绝对是唯一的解决方案(假设代码确实已经干净)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多