次のコードを実行すると、このエラーが発生します。
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'
なぜこのエラーが発生するのですか?
トレース出力がエラーの原因となるパラメーターに対応していないため、これに何度も遭遇します。トレースのArgumentClass
に注意してください。これがヒントです。
'help'は@click.option
の受け入れ可能なパラメーターです。ただし、クリックライブラリでは、独自の引数を文書化することをお勧めします。 @click.argument
help
パラメータがこの例外の原因です。
このコードは機能します(, 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.
コマンドを引数として定義しています。クリックすると、コマンドを定義する方法がここで試行する方法よりも優れていることに注意してください。
@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
パラメーターを使用できません。実際、クリックのドキュメントには、独自の引数をドキュメント化する必要があると記載されています。しかし、どうすればいいのかわかりません。ヒントはありますか?
クリックライブラリは-help
内のclick.arguments
パラメータを許可しません(このコメントが書き込まれたときの現在のバージョン6.7を含む)。ただし、-help
内でclick.options
パラメータを使用できます。
現在のクリックドキュメントは http://click.pocoo.org/6/documentation/ で確認できます。以前は http://click.pocoo.org/で確認できます。 5/documentation / この動作は最近変更されていません。次に、それはWADです。バグではありません。
同じエラーで、引数名がurl_Hook(camelCase)だったため、エラーが発生しました。 url_hookに変更した後、解決されました。
私にとっては、変数がDnsCryptExractDir
のように見えたためです。* argsが変数を見つけられなかったため、このdnscryptexractdir
も変更する必要があります。