错误消息";python pylint';C0103:无效的常量名称;

错误消息";python pylint';C0103:无效的常量名称;,python,pylint,Python,Pylint,我对这张照片中的错误感到困惑: 我不知道如何修理它们。我的程序是一个Python-web框架。当我使用VisualStudio代码调试程序时,Pylint会显示这些错误。我知道这个问题无关紧要,但它让我很恼火。我怎样才能修好它 # -*- coding: utf-8 -*- import sys from flask import Flask from flask_bootstrap import Bootstrap from flask_moment import Moment #from

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

我不知道如何修理它们。我的程序是一个Python-web框架。当我使用VisualStudio代码调试程序时,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()
命令指定常量的名称

因此,将这些变量重命名为全部大写

提示:如果你在谷歌上搜索“C0103”,它会带你去Pylint messages wiki,并提供详细信息。

正如昆多所解释的,它指出:

常量通常在模块级别定义,并用所有大写字母书写,用下划线分隔单词


关键是Python中的“常量”实际上并不存在。根据PEP 8,Pylint期望模块级变量为“常量”

也就是说,您有几种选择:

  • 如果您不想要这个“常量”的东西,那么请将Pylint的
    常量rgx
    正则表达式更改为与变量rgx相同,例如
    变量rgx

  • 您可以使用
    #pylint:disable=invalid name
    ,停用此文件的警告,甚至在文件中的本地警告

  • 通过将模块级变量包装到函数中,避免使用它们

在您的情况下,我会选择第三个选项,创建一个
build\u app
函数或类似的东西。这将返回应用程序(也可能返回“db”对象,但您有多种选择)。然后,您可以添加第二个选项中的盐,以获得如下结果:


app=build\u app()#pylint:disable=invalid name

将这些变量重命名为全部大写

比如

app = Flask(__name__)      => APP = Flask(__name__)
bootstrap = Bootstrap(app) => BOOTSTRAP = Bootstrap(app)

PEP 8只考虑模块级的常量这一事实可能是许多开发人员使用专用函数的原因

所以你可以这样解决你的问题:

def main():
    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)
    db.create_all()
    app.run()

if __name__ == '__main__':
    main()

您可以在Python脚本的开头使用以下行并执行它:

# pylint: disable=invalid-name

它将禁用静态代码分析器中的所有无效常量约定消息。

“根据PEP 8,Pylint期望模块级变量为‘常量’。”AFAICT PEP 8并不是说所有模块级变量都是常量。正相反:常数是模块级变量。-1 PEP 8(来自您的链接):
常数通常在模块级定义,并用所有大写字母书写,用下划线分隔单词。
@Alec是正确的。这并不是说不要使用模块(非常量)变量。那太傻了。我也不同意你的建议,为了避免Pylint.IMO这样的静态代码检查器中本质上存在的缺陷而对代码进行模糊处理,这可能不是经常出现的原因,如果有的话。