【问题标题】:How do I hide Pylint 1.2.1 error output when using Django?使用 Django 时如何隐藏 Pylint 1.2.1 错误输出?
【发布时间】:2014-06-09 22:47:17
【问题描述】:

我正在尝试将 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 设置来消除这些错误?最好不要为整个项目隐藏这些错误。

【问题讨论】:

  • 更新:目前我可以通过在运行 pylint 之前运行一个更改我的文件的脚本来避免错误消息。但这似乎比需要做的工作更多。

标签: python django pylint


【解决方案1】:

您可以在模块顶部的评论中通过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 分析可调用调用时,它会根据可调用的类型检查不同的参数。不幸的是,如果可调用对象是一个类,那么它首先检查__new__(在某些情况下,它可能存在于父元类中),如果找到,则完全忽略__init__。这就是为什么您收到的错误提到namebasesattrs,例如它们是__new__ 的参数。

【讨论】:

  • 在同一个文件中使用 UserData 时,将其放入 UserData 文件中似乎会起作用,但如果将 UserData 导入并在另一个文件中使用则不会。 (感谢发帖,我没有意识到您现在可以使用错误名称而不是查找错误代码!)
  • @camomilk:作为另一种可能的选择,也许您可​​以尝试使用 pylint_django 插件,据称它修复了由于 Django 动态生成某些对象属性的方式而生成的某些警告(尽管,我找不到任何关于您收到的错误的具体说明)。
  • 我试用了 pylint_django,但没有解决这个错误。我猜它是为早期版本的 pylint 制作的,我认为这个错误是 pylint 1.2.1 中的新错误(至少对于构造函数而言)。
  • @camomilk:我相信你是对的 - 我已经用我找到的更多信息进行了编辑。看来这是 pylint 中的一个已知错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多