Chr*_*tti 18 python python-click
运行以下代码会导致此错误:
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()
Run Code Online (Sandbox Code Playgroud)
$ 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'
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误?
Chr*_*tti 26
我一次又一次地遇到这种情况,因为跟踪输出与导致错误的参数不对应.请注意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()
Run Code Online (Sandbox Code Playgroud)
输出:
$ python3 foo.py start
start
False
Run Code Online (Sandbox Code Playgroud)
帮助输出:
Usage: test.py [OPTIONS] COMMAND
COMMAND: start|stop|restart
Options:
--debug / --no-debug Run in foreground
--help Show this message and exit.
Run Code Online (Sandbox Code Playgroud)
您将命令定义为参数。请注意,单击比您在此处尝试的方法更好地定义命令。
@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()
Run Code Online (Sandbox Code Playgroud)
将导致以下默认帮助文本:
Usage: test.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
start
stop
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果您真的需要参数,则不能使用help参数。click 文档确实指出您应该记录您自己的论点。但是,我不知道该怎么做。任何提示?
click 库不允许-help在里面添加参数click.arguments(包括当前版本6.7,当此注释被写入时)。但是,您可以使用-help里面的参数click.options。您可以在http://click.pocoo.org/6/documentation/
上查看当前的点击文档,或者在http://click.pocoo.org/5/documentation/上查看以前的点击文档,此行为最近没有改变。然后,它是一个WAD。这不是BUG。
| 归档时间: |
|
| 查看次数: |
11263 次 |
| 最近记录: |