点击和pylint

Posted

技术标签:

【中文标题】点击和pylint【英文标题】:Click and pylint 【发布时间】:2018-09-15 17:43:02 【问题描述】:

这是一个导致 pylint 错误的 click 用法的简单示例:

@click.command()
@click.option('--option', is_flag=True)
def foo(option):
    click.echo(option)

foo()

foo 没有收到任何参数,所以我得到 E1120(无参数值)。 所以我这样做了:

@click.command()
@click.option('--option', is_flag=True)
def foo(**kwargs):
    click.echo(kwargs["option"])

foo()

有没有更好的方法? 或者一种在 Visual Studio Code 中仅对一行禁用 pylint 的方法?

【问题讨论】:

【参考方案1】:

@click.command 装饰器编辑你的函数参数,但 pylint 不知道这一点,因为它实际上并没有运行你的代码。

我认为让你的代码变得奇怪只是为了让 pylint 高兴是没有意义的。相反,忽略它,或添加注释以在当前范围内禁用该警告:

# pylint: disable=no-value-for-parameter

【讨论】:

感谢您的回答。但是有没有办法将此异常仅应用于 VSC 中的一行/文件? 是的,将此注释添加到行尾 哇!我一开始没明白。 有没有办法告诉 pylint 在检查 @click-decorated 函数时总是禁用 no-value-for-parameter? (所以我不必在每个脚本中都这样做。) 据我所知没有。您可以全局禁用 no-value-for-parameter,但这听起来是个坏主意。【参考方案2】:

有一种方法可以避免这些错误的发生,即不使用修饰语法。这可能是@Azsgy 所说的“奇怪”:-)

@click.option(
    "--direction",
    default="upgrade",
    type=click.Choice(["upgrade", "downgrade"]),
    help="Direction of migration upgrade/downgrade",
)
@click.argument("revision", default="heads")
def _main(direction, revision):
    """Runs migrations on each of the databases."""
    pass


main = click.command()(_main)


if __name__ == "__main__":
    main()

好不好看还有待商榷 :-)

【讨论】:

以上是关于点击和pylint的主要内容,如果未能解决你的问题,请参考以下文章

vscode安装pylint报错如何解决

Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法

带有 PyLint 和 autoPep8 的 Visual Studio 代码:如何避免 PyLint 抱怨我的行长?

Pylint和Subprocess.Run返回退出状态28

如何使用 Pylint 来规范 Python 代码风格

声纳未能获得 pylint 结果