标签: pylint

pylint 1.4报告所有C扩展上的E1101(无成员)

我们一直是粉丝的忠实粉丝pylint.它的静态分析已成为我们所有python项目的关键部分,并且节省了大量时间来追逐晦涩的错误.但是从1.3 - > 1.4升级后,几乎所有编译的c扩展都会导致E1101(无成员)错误.

之前通过pylint1.3 运行完全清洁的项目现在抱怨几乎每个使用E1101的C扩展成员.我们被迫禁用E1101错误,但这实际上减损了它的用处pylint.

例如,这完全有效地使用了lxml

r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
Run Code Online (Sandbox Code Playgroud)

运行此过程pylint,它会报告:

$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E:  3, 6: Module 'lxml.etree' has no 'Element' member (no-member)
Run Code Online (Sandbox Code Playgroud)

但它完全有效:

$ python valid.py
<Element mydoc at 7fddf67b1ba8>
Run Code Online (Sandbox Code Playgroud)

这里真的很奇怪.一小部分C扩展似乎可以正常工作pylint,例如:

r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version

$ pylint -rn valid2.py
No config file …
Run Code Online (Sandbox Code Playgroud)

python pylint python-extensions

47
推荐指数
3
解决办法
9851
查看次数

Python - 我应该把我的帮助函数放在类的内部还是外部?

在Python中,如果类的某些方法需要辅助函数,但是辅助函数本身不使用类中的任何东西,我应该将辅助函数放在类的内部还是外部?

我试过把它放在里面,但是PyLint抱怨说这个功能可以放在外面.

@Karl:

该类是软件升级程序,如果该文件夹尚不存在,则辅助函数会创建一个新文件夹.这个类在一个模块中,现在几乎只有类的代码.其他课程可能会在以后添加.

python class pylint

46
推荐指数
2
解决办法
2万
查看次数

如何处理Pylint的"太多实例属性"消息?

我刚刚尝试用Pylint lint一些代码,最后剩下的错误是

R0902: too-many-instance-attributes (8/7)
Run Code Online (Sandbox Code Playgroud)

我理解限制实例属性数量的基本原理,但有七个看起来有点低.我也意识到短号不应该有最后一个字.但是,我想知道我应该做什么,而不是:

def __init__(self, output_file=None, output_dir=None):
    """
    Set the frobnicator up, along with default geometries
    """

    self.margin = 30

    self.pos = [0, 0]
    self.sep = [5, 5]

    self.cell = [20, 20]

    self.frobbr = library.Frobbr()

    page = self.frobbr.get_settings('page')

    self.lim = [page.get_width() - self.margin,
                page.get_height() - self.margin]

    self.filename = output_file
    self.moddir = output_dir
Run Code Online (Sandbox Code Playgroud)

我应该将几何包装到一个字典中,做一些其他的事情来阻止Pylint抱怨,或者只是忽略它(我真的不想这样做)?

python instance-variables pylint code-readability code-structure

46
推荐指数
3
解决办法
3万
查看次数

Python:避免关于太多参数的pylint警告

我想将一个大的Python函数重构为较小的函数.例如,请考虑以下代码段:

x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
Run Code Online (Sandbox Code Playgroud)

当然,这是一个微不足道的例子.在实践中,代码更复杂.我的观点是它包含许多必须传递给提取函数的局部范围变量,它们可能如下所示:

def mysum(x1, x2, x3, x4, x5, x6, x7, x8, x9):
    x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
    return x
Run Code Online (Sandbox Code Playgroud)

问题是pylint会触发有关太多参数的警告.做以下事情可以避免警告:

def mysum(d):
    x1 = d['x1']
    x2 = d['x2']
    ...
    x9 = d['x9']
    x = x1 + x2 + x3 + x4 + x5 + x6 + x7 …
Run Code Online (Sandbox Code Playgroud)

python refactoring pylint

44
推荐指数
8
解决办法
7万
查看次数

Pylint找不到SQLAlchemy查询成员

我有一个使用Flask-SQLAlchemy(v2.0)的Flask(v0.10.1)应用程序,我正在尝试配置Pylint来检查它.使用Python 3.4.2运行.

第一个错误是:

 Instance of 'SQLAlchemy' has no 'Table' member (no-member)
Run Code Online (Sandbox Code Playgroud)

我修复了这个,忽略了SQLAlchemy上的成员属性检查:

ignored-classes=SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

但是我对实体上的查询成员有问题:

Class 'UserToken' has no 'query' member (no-member)
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,而不必忽略每个查询调用上的无成员错误?


烧瓶引导:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
app = Flask(__name__)
db.init_app(app)
app.run()
Run Code Online (Sandbox Code Playgroud)

UserToken实体:

from app import db

class UserToken(db.Model):
    user_token_id = db.Column(db.Integer, primary_key=True, index=True)
    token_auth = db.Column(db.String(64), unique=True, nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)

控制器:

from entities import UserToken

token = UserToken.query.filter(
    UserToken.token_auth == token_hash,
).first()
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pylint python-3.x flask-sqlalchemy

42
推荐指数
10
解决办法
3万
查看次数

Visual Studio代码中的Pylint"未解决的导入"错误

我正在使用以下设置

  • MacOS Mojave
  • Python 3.7.1
  • Visual Studio Code 1.30
  • Pylint 2.2.2
  • Django 2.1.4

我希望我们能够在visual studio代码中使我的生活变得更轻松,但是,每次导入我都会声明"未解决的导入".即使是默认的django导入(即来自django.db的导入模型).

我认为这是因为它没有看到虚拟环境python文件.

一切都很好,但它开始变得烦人.

我拥有的解释器选项都是python的系统版本.它似乎根本看不到我的虚拟环境python(它与我的工作区不在同一个目录中,因此该部分有意义).

如果我在settings.json文件中设置python.PythonPath,它只是忽略它并且不会将我的虚拟环境路径列为选项.我也尝试在我的全局python设置中进行设置,但它也没有显示出来.

有没有人遇到这个问题并知道快速解决方案让它工作?

谢谢,jAC

python django pylint visual-studio-code

42
推荐指数
17
解决办法
5万
查看次数

pylint人类可读消息ID列表?

最新版本的pylint允许使用人类可读消息ID来抑制消息.例如,而不是

class MyTest(unittest.TestCase):  # pylint: disable=R0904
    ...
Run Code Online (Sandbox Code Playgroud)

你可以指定:

class MyTest(unittest.TestCase):  # pylint: disable=too-many-public-methods
    ...
Run Code Online (Sandbox Code Playgroud)

页面列出了数字消息ID.但是,我正在寻找消息ID的人类可读版本的完整列表.我在哪里可以找到该列表?

python pylint

41
推荐指数
2
解决办法
7420
查看次数

“SQLAlchemy”的实例没有“列”成员(无成员)

我目前正在尝试实现 Steam 登录网站。但是我无法在代码中传递这个错误。我已经创建了数据库对象,但它一直显示我之前提到的错误。我不确定 SQLAlchemy 是否发生了变化,或者自从我使用它以来发生了什么变化。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

发出的消息pylint

E1101: Instance of 'SQLAlchemy' has no 'Column' member (no-member)
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pylint flask python-3.x

41
推荐指数
6
解决办法
4万
查看次数

python-pylint'C0103:无效的常量名称

我对这张照片中的错误感到困惑:

在此输入图像描述

我不知道如何解决它们.我的程序是一个Python-Flask Web框架.当我使用VScode调试程序时,Pylint会显示这些错误.我知道这个问题无关紧要,但这让我很恼火.我该如何解决?

# -*- coding: utf-8 -*-
import sys
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_moment import Moment
#from flask_wtf import Form
#from wtforms import StringField, SubmitField
#from wtforms.validators import Required
from flask_sqlalchemy import SQLAlchemy

reload(sys)
sys.setdefaultencoding('utf-8')

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost:3306/test?'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)


if __name__ == '__main__':
    db.create_all()
    app.run()
Run Code Online (Sandbox Code Playgroud)

python pylint

40
推荐指数
3
解决办法
4万
查看次数

如何为目录中的所有Python文件运行Pylint

我有

find . -iname "*.py" -exec pylint -E {} ;\
Run Code Online (Sandbox Code Playgroud)

FILES=$(find . -iname "*.py")
pylint -E $FILES
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,第一个命令将为每个Python文件运行pylint,第二个命令将为所有文件运行一次pylint.我希望两个命令都会返回相同的输出,但它们会返回不同的结果.我认为这种差异与导入和F(失败)pylint消息有某种关系,这种情况在导入失败时发生,而不是由pylint -E输出.

有人已经经历过这个并且可以解释为什么差异发生以及运行pylint的最佳方式是什么?

python pylint

39
推荐指数
9
解决办法
3万
查看次数