我正在try 为点击decorator @click.options('--foo', required=True)创建一个包装decorator :

import click

def foo_option(func):
    orig_decorator = click.option('--foo', required=True)(func)
    def decorator(*args, **kwargs):
        orig_decorator(*args, **kwargs)
    return decorator

@click.command()
@foo_option
def bar1(foo: str) -> None:
    print(f"bar1: {foo}")

if __name__ == '__main__':
    bar1()

这不管用.当我以script.py --foo=1的速度运行它时,我得到错误:

Usage: script.py [OPTIONS]
Try 'script.py --help' for help.

Error: No such option: --foo

预期输出应为:

bar1: 1

我遗漏了什么? 有关背景信息,请参阅Refactor @click.option() arguments.

推荐答案

问题在于你是如何构建这个装饰者的.在本例中,您使用的是click.选项,这是不必要的.当您创建一个修饰符来包裹另一个修饰符(如click.ption)时,您应该考虑修饰符是自下而上工作的.以下是更新后的代码:

import click


def foo_option(func):
    return click.option('--foo', required=True)(func)


@click.command()
@foo_option
def bar1(foo: str) -> None:
    print(f"bar1: {foo}")


if __name__ == '__main__':
    bar1()

当您运行该脚本时,您将获得预期的输出.

Python相关问答推荐

如何用symy更新分段函数

在内部列表上滚动窗口

如何使用symy打印方程?

根据不同列的值在收件箱中移动数据

删除最后一个pip安装的包

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何获取numpy数组的特定索引值?

使用密钥字典重新配置嵌套字典密钥名

导入错误:无法导入名称';操作';

在matplotlib中使用不同大小的标记顶部添加批注

关于两个表达式的区别

提高算法效率的策略?

如果有2个或3个,则从pandas列中删除空格

使用类型提示进行类型转换

计算机找不到已安装的库'

如何在Python中将超链接添加到PDF中每个页面的顶部?

解决Geopandas和Altair中的正图和投影问题

如何在PythonPandas 中对同一个浮动列进行逐行划分?

Regex用于匹配Python中逗号分隔的AWS区域