单击和 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 已满”。
这里是一个简单的例子,点击 导致 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
:
[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 已满”。