禁用代码段或函数中的pylint执行

14 投票
4 回答
14696 浏览
提问于 2025-04-18 18:46

我正在使用pylint 0.27和python 2.7.3。pylint有一个已知的bug,当它分析包含.next()调用的代码时会出问题。具体情况可以参考这个链接:http://www.logilab.org/122793,它会显示出错的详细信息。

我不能更改我的python和pylint版本,但我想通过在包含.next()调用的代码上添加#pylint: MAGIC注释来解决这个问题,来让pylint忽略这部分代码。

我找到了一种方法,可以通过在文件中使用#pylint: skip-file来禁用pylint检查,但我想在函数级别或者甚至是行级别来做到这一点。

如果有其他解决办法也欢迎分享!

4 个回答

1

很遗憾,你无法在本地解决你遇到的错误。

你可能会想在源代码中找到出问题的那段代码,然后把相关的提示信息关闭,但这样做是行不通的,因为那段代码还是会被执行。原因在于,当你尝试关闭某条提示信息时,负责检测这条信息的代码还是会运行,只是最后不会显示那条提示而已。

不过,如果你全局关闭这条提示信息,可能会有效(这取决于具体的实现方式)。在你的情况下,看来你只能跳过整个“日志记录”的检查。

总结一下,要避免你的错误追踪信息,你可以选择:

  • 在本地使用 pylint: skip-file,这样 pylint 的所有功能都会启用,但整个出问题的文件会被跳过。

  • 全局关闭“日志记录”检查 (--disable=logging),这样整个代码(包括出问题的文件)都会被检查,但不会显示“日志记录”的提示信息。

2

当我重构代码的时候,我会把还没修改的部分放在一个叫做 class ToDo 的类里面,并且在这个类的开头加一个指令,让它忽略所有的消息。等到这个类结束的时候,这个指令就不再有效了。下面是一个简单的例子:

def unused_variable(foo=''):
    "generate W0613"

class ToDo:
    #pylint: disable = E, W, R, C
    #disables W0613 and E0213

    def unused_variable(foo=''):
        "generate W0613 and E0213"

def main(foo=''):
    "generate W0613"
3

如果你想完全关闭pylint对某个函数的检查,而不需要一个个列出每个pylint的违规代码,可以在禁用时指定 all,比如这样:

def foo():
    # pylint: disable=all
    """You put the disable right under the function signature 
    to disable pylint for the entire function scope.
    """
    pass
20

你可以通过在函数体的第一行添加pylint的注释来实现这个功能,像这样:

def wont_raise_pylint():
  # pylint: disable=W0212
  some_module._protected_member()
  some_module._protected_member()

def will_still_raise_pylint():
  some_module._protected_member()

撰写回答