Python 多个 click.options - 得到意外的关键字参数

Python multiple click.options - got unexpected keyword argument

使用 python 单击时,我无法将选项传递给其中一种方法。请考虑以下代码。

import click

@click.command()
@click.option('--config', default='default.cfg', help = 'comfiguration file')
@click.option('--port', default=9093)
def foo(config_name, port):
    print('Function has been successfully called..!')

if __name__ == '__main__':
    foo()

我得到的错误是:

TypeError: foo() got an unexpected keyword argument 'config

堆栈跟踪是:

Traceback (most recent call last):
  File "temp.py", line 10, in <module>
    foo()
  File "/home/sagar/anaconda3/lib/python3.6/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/sagar/anaconda3/lib/python3.6/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/sagar/anaconda3/lib/python3.6/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/sagar/anaconda3/lib/python3.6/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)

我不明白为什么会这样。我读了几个关于 argument 的类似问题,其中一个不能使用 help 选项,但在这种情况下,我认为我没有做任何不受支持的事情。

但有趣的是:如果我删除 --config 选项(当然还有函数中的参数),那么它就可以完美运行。我确信一个人可以使用多个选项,我尝试使用 type=string,但它也无济于事。

您将选项命名为 --config,因此 click 试图将名为 config 的参数传递给 foo,但 foo 中没有 config的签名。据推测,您想写 def foo(config, port): 而不是 def foo(config_name, port):.