单击和 pylint

Click and pylint

这里是一个简单的例子,点击 导致 pylint 错误的用法:

@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 代码中只为一行禁用 pylint 的方法?

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

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

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

有一种方法可以通过不使用修饰语法来避免这些错误的发生。这可能就是@Azsgy 所说的 'weird' :-)

@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 authors have added 一种处理方法:signature-mutators 设置。

这应该告诉 pylint 单击会改变函数签名,并且 它应该看起来更深一点:

# .pylintrc
...
signature-mutators=click.decorators.option

pylint 检查被调用函数装饰器的 name/qualified-name 是否在 signature-mutators 列表中。因此,我们不能使用 click.option ,因为那是一个别名,但我们必须使用 声明的 名称。

为了完整起见,我 认为 我们可以添加在 click/decorators.py:

中找到的所有装饰器
signature-mutators=click.decorators.option,
                   click.decorators.argument,
                   click.decorators.version_option,
                   click.decorators.help_option,
                   click.decorators.pass_context,
                   click.decorators.confirmation_option

@xtofl 的解决方案有效。请注意,选项应位于名为 TYPECHECK:

的 header 下方
[TYPECHECK]
signature-mutators=click.decorators.option,
                   click.decorators.argument,
                   click.decorators.version_option,
                   click.decorators.help_option,
                   click.decorators.pass_context,
                   click.decorators.confirmation_option

可能其他人提出了解决此问题的编辑方案,因为如果我尝试修改@xtofl 的解决方案,我会收到“建议的编辑 queue 已满”。