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

Xin*_*ing 40 python pylint

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

在此输入图像描述

我不知道如何解决它们.我的程序是一个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)

sth*_*ult 50

正如Kundor所解释的那样,PEP 8指出:

常量通常在模块级别定义,并以全部大写字母书写,下划线分隔单词.

关键是python中的"常量"并不存在.根据PEP 8,Pylint期望模块级变量为"常量".

这就是说你有几个选择:

  • 你不希望这个"常数"的东西,然后改变pylint的const-rgx正则表达式,例如variable-rgx,

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

  • 通过将模块级变量包装到函数中来避免它们.

在你的情况下,我将使用第三个选项,通过创建一个build_app函数或类似的东西,它将返回应用程序(也可能是'db'对象,但你有几个选择).然后你可以添加第二个选项的盐来得到类似的东西:

app = build_app() # pylint: disable=invalid-name

  • -1 PEP 8(来自您的链接):`常量通常在模块级别定义,并以所有大写字母书写,下划线分隔单词。`@Alec 是对的。这并不是说不要使用模块(非常量)变量。那将是愚蠢的。我也不同意你混淆代码的建议,只是为了避免像 Pylint 这样的静态代码检查器本质上是一个缺陷。 (3认同)
  • "Pylint,根据PEP 8,期望模块级变量为'常量'."AFAICT PEP 8*不*表示所有模块级变量都是常量.它说反过来:常量是模块级变量. (2认同)

T.M*_*.M. 13

PEP8仅考虑模块级别的常量这一事实可能是许多开发人员使用专用main()函数的原因.

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

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()
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这可能不是经常发生的原因(如果有的话)。 (2认同)

Nic*_*teo 5

PEP 8规定常量名称应全部大写.

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

提示:如果你谷歌'C0103'它将带你到该消息的PyLint消息wiki 条目,并详细说明.