禁用代码段或函数中的pylint执行
我正在使用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 个回答
很遗憾,你无法在本地解决你遇到的错误。
你可能会想在源代码中找到出问题的那段代码,然后把相关的提示信息关闭,但这样做是行不通的,因为那段代码还是会被执行。原因在于,当你尝试关闭某条提示信息时,负责检测这条信息的代码还是会运行,只是最后不会显示那条提示而已。
不过,如果你全局关闭这条提示信息,可能会有效(这取决于具体的实现方式)。在你的情况下,看来你只能跳过整个“日志记录”的检查。
总结一下,要避免你的错误追踪信息,你可以选择:
在本地使用
pylint: skip-file
,这样 pylint 的所有功能都会启用,但整个出问题的文件会被跳过。全局关闭“日志记录”检查 (
--disable=logging
),这样整个代码(包括出问题的文件)都会被检查,但不会显示“日志记录”的提示信息。
当我重构代码的时候,我会把还没修改的部分放在一个叫做 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"
如果你想完全关闭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
你可以通过在函数体的第一行添加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()