使用Django时如何隐藏Pylint 1.2.1错误输出?

时间:2014-06-09 22:47:18

标签: python django pylint

我正在尝试将pylint集成到使用Django(1.6.1)的本地项目中,并且我使用了Pylint 0.27.0,但是现在我已经更新到最新的1.2.1,一些新的错误是突然出现,我似乎无法让它们消失。

以下是错误的性质:


from django.db import models

class UserData(models.Model):
    # data...
    fieldA  = models.IntegerField(default=0)
    fieldB  = models.IntegerField(default=0)

# ...

x = UserData(fieldA=1, fieldB=2)
# The above line of code generates errors:
# Unexpected keyword argument 'fieldA' in constructor call (unexpected-keyword-arg)
# Unexpected keyword argument 'fieldB' in constructor call (unexpected-keyword-arg)
# No value for argument 'name' in constructor call (no-value-for-parameter)
# No value for argument 'bases' in constructor call (no-value-for-parameter)
# No value for argument 'attrs' in constructor call (no-value-for-parameter)

我试过通过在pylint检查期间编辑文件来解决这个问题,使用类似这样的东西:

UserData.__init__ = lambda self, *args, **kwargs: None

但是Pylint仍会打印出相同的错误。我也尝试直接将构造函数调用添加到UserData对象,但仍然没有运气。

有什么方法可以修改代码或pylint设置来安静这些错误?最好不要隐藏整个项目的错误。

2 个答案:

答案 0 :(得分:2)

您可以在模块顶部的注释中通过appending a specific rule在模块级别禁用这些错误:

# pylint: disable=unexpected-keyword-arg, no-value-for-parameter

from django.db import models

class UserData(models.Model):
    ...

可以使用错误的符号名称(与错误编号相对)starting with version 0.25.3


pylint的这个特殊问题似乎是由a commit from April 2014引起的。审稿人已经指出了这个问题,并且other users也受到了影响,但它似乎尚未修复。

基本上,当pylint分析可调用的调用时,它会根据可调用的类型检查不同的参数。不幸的是,如果callable是一个类,那么它首先检查__new__(在某些情况下,它可以存在于父元类中),如果找到,则完全忽略__init__。这就是为什么您收到的错误提到namebasesattrs,例如他们是__new__的论据。

答案 1 :(得分:1)

pylint版本1.4开始,不再为Django生成这些错误。