Python множественные click.options - получил неожиданный аргумент ключевого слова - PullRequest
0 голосов
/ 28 июня 2018

При использовании Python click, я не могу передать опции одному из методов. Пожалуйста, рассмотрите следующий код.

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, но это также не помогает.

1 Ответ

0 голосов
/ 28 июня 2018

Вы назвали опцию --config, поэтому click пытается передать аргумент с именем config в foo, но в подписи foo нет config. Предположительно, вы хотите написать def foo(config, port): вместо def foo(config_name, port):.

...