web-dev-qa-db-ja.com

click.argumentを使用すると、「予期しないキーワード引数 'help'が表示されるのはなぜですか?」

次のコードを実行すると、このエラーが発生します。

TypeError:init()が予期しないキーワード引数 'help'を取得しました

コード:

import click

@click.command()
@click.argument('command', required=1, help="start|stop|restart")
@click.option('--debug/--no-debug', default=False, help="Run in foreground")
def main(command, debug):
    print (command)
    print (debug)

if __name__ == '__main__':
    main()

完全なエラー出力:

$ python3 foo.py start
Traceback (most recent call last):
  File "foo.py", line 5, in <module>
    @click.option('--debug/--no-debug', default=False, help="Run in foreground")
  File "/home/cbetti/python/lib/python3/dist-packages/click-4.0-py3.4.Egg/click/decorators.py", line 148, in decorator
    _param_memo(f, ArgumentClass(param_decls, **attrs))
  File "/home/cbetti/python/lib/python3/dist-packages/click-4.0-py3.4.Egg/click/core.py", line 1618, in __init__
    Parameter.__init__(self, param_decls, required=required, **attrs)
TypeError: __init__() got an unexpected keyword argument 'help'

なぜこのエラーが発生するのですか?

22
Chris Betti

トレース出力がエラーの原因となるパラメーターに対応していないため、これに何度も遭遇します。トレースのArgumentClassに注意してください。これがヒントです。

'help'は@click.optionの受け入れ可能なパラメーターです。ただし、クリックライブラリでは、独自の引数を文書化することをお勧めします。 @click.argumenthelpパラメータがこの例外の原因です。

このコードは機能します(, help="start|stop|restart"@click.argumentがないことに注意してください)。

import click

@click.command()
@click.argument('command', required=1)
@click.option('--debug/--no-debug', default=False, help="Run in foreground")
def main(command, debug):
    """ COMMAND: start|stop|restart """
    print (command)
    print (debug)

if __name__ == '__main__':
        main()

出力:

$ python3 foo.py start
start
False

ヘルプ出力:

Usage: test.py [OPTIONS] COMMAND

  COMMAND: start|stop|restart

Options:
  --debug / --no-debug  Run in foreground
  --help                Show this message and exit.
31
Chris Betti

コマンドを引数として定義しています。クリックすると、コマンドを定義する方法がここで試行する方法よりも優れていることに注意してください。

@click.group()
def main():
    pass

@click.command()
def start():
    print "running command `start`"

@click.command()
def stop():
    print "running command `stop`"

main.add_command(start)
main.add_command(stop)

if __name__ == '__main__':
    main()

次のデフォルトのヘルプテキストになります。

Usage: test.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  start
  stop

そうは言っても、本当に引数が必要な場合は、helpパラメーターを使用できません。実際、クリックのドキュメントには、独自の引数をドキュメント化する必要があると記載されています。しかし、どうすればいいのかわかりません。ヒントはありますか?

4
bartaelterman

クリックライブラリは-help内のclick.argumentsパラメータを許可しません(このコメントが書き込まれたときの現在のバージョン6.7を含む)。ただし、-help内でclick.optionsパラメータを使用できます。
現在のクリックドキュメントは http://click.pocoo.org/6/documentation/ で確認できます。以前は http://click.pocoo.org/で確認できます。 5/documentation / この動作は最近変更されていません。次に、それはWADです。バグではありません。

3
derwyddon

同じエラーで、引数名がurl_Hook(camelCase)だったため、エラーが発生しました。 url_hookに変更した後、解決されました。

0
user1874480

私にとっては、変数がDnsCryptExractDirのように見えたためです。* argsが変数を見つけられなかったため、このdnscryptexractdirも変更する必要があります。

0
sonance207