L'exécution du code suivant entraîne cette erreur:
TypeError: init () a obtenu un argument de mot clé inattendu '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'
Pourquoi cette erreur se produit-elle?
Je rencontre cela encore et encore parce que la sortie de trace ne correspond pas au paramètre à l'origine de l'erreur. Notez ArgumentClass
dans la trace, c'est votre indice.
'help' est un paramètre acceptable pour @click.option
. La bibliothèque de clics préfère cependant que vous documentiez vos propres arguments. Le @click.argument
help
paramètre provoque cette exception.
Ce code fonctionne: (notez le manque de , help="start|stop|restart"
dans @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()
Production:
$ python3 foo.py start
start
False
Sortie d'aide:
Usage: test.py [OPTIONS] COMMAND
COMMAND: start|stop|restart
Options:
--debug / --no-debug Run in foreground
--help Show this message and exit.
Vous définissez des commandes comme arguments. Notez que le clic a une meilleure façon de définir les commandes que ce que vous essayez ici.
@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()
entraînera le texte d'aide par défaut suivant:
Usage: test.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
start
stop
Cela dit, si vous avez vraiment besoin d'arguments, vous ne pouvez pas utiliser le paramètre help
. La documentation de clic indique en effet que vous devez documenter vos propres arguments. Cependant, je ne sais pas comment faire ça. Des indices?
la bibliothèque de clics ne permet pas -help
paramètre à l'intérieur click.arguments
(y compris la version actuelle 6.7 lorsque ce commentaire a été écrit). Mais, vous pouvez utiliser le -help
paramètre à l'intérieur click.options
.
Vous pouvez consulter la documentation actuelle sur les clics à http://click.pocoo.org/6/documentation/ ou précédente à http://click.pocoo.org/ 5/documentation / ce comportement n'a pas changé récemment. Ensuite, c'est un WAD. Ce n'est pas un BUG.
Pour la même erreur, je l'ai eu parce que mon nom d'argument était url_Hook (camelCase). Après l'avoir changé en url_hook, il a été résolu.
Pour moi, c'était parce que ma variable ressemblait à DnsCryptExractDir
et je dois aussi la modifier cette dnscryptexractdir
parce que * args n'a pas pu la trouver.