使用 python 的 click 库时如何消除此 TypeError?
How do I get rid of this TypeError when using python's click library?
所以我认为使用 python click 库来构建一个简单的命令行工具会非常简单。看来我被困在了一些我不喜欢的东西上。我有以下代码:
import click
import json
import os.path
import sys
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
@click.argument('title')
@click.argument('category')
@click.argument('tech')
@click.argument('problemNotes')
@click.argument('solutionNotes')
def hello(count, name, title, category, tech, problemNotes, solutionNotes):
print(tech + problemNotes + solutionNotes)
if __name__ == '__main__':
hello()
这看起来很简单。 CL 工具应该接受一些选项和参数,然后打印出一些。然后我在我的终端输入以下命令来调用该工具:
python bugbook.py --name="steve" "Annoying stack bug" "compile bug" "xcode" "annoying" "get meowed"
但我收到以下错误:
Traceback (most recent call last):
File "bugbook.py", line 22, in <module>
hello()
File "/Library/Python/2.7/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/Library/Python/2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Library/Python/2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
TypeError: hello() got an unexpected keyword argument 'solutionnotes'
奇怪,我觉得。似乎此错误是由以下原因引起的:
if __name__ == '__main__':
hello()
实际上调用 main 函数的函数未能传入正确的参数或其他内容,但我已经尝试修补但无法使其正常工作。我错过了什么明显的东西??
令牌规范化
版本 2.0 中的新增内容。
从 Click 2.0 开始,可以提供用于规范化标记的函数。标记是选项名称、选择值或命令值。例如,这可用于实现不区分大小写的选项。
为了使用此功能,上下文需要传递一个执行标记规范化的函数。例如,您可以有一个将标记转换为小写的函数:
CONTEXT_SETTINGS = dict(token_normalize_func=lambda x: x.lower())
@click.command(context_settings=CONTEXT_SETTINGS)
@click.option('--name', default='Pete')
def cli(name):
click.echo('Name: %s' % name)
所以我认为使用 python click 库来构建一个简单的命令行工具会非常简单。看来我被困在了一些我不喜欢的东西上。我有以下代码:
import click
import json
import os.path
import sys
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
@click.argument('title')
@click.argument('category')
@click.argument('tech')
@click.argument('problemNotes')
@click.argument('solutionNotes')
def hello(count, name, title, category, tech, problemNotes, solutionNotes):
print(tech + problemNotes + solutionNotes)
if __name__ == '__main__':
hello()
这看起来很简单。 CL 工具应该接受一些选项和参数,然后打印出一些。然后我在我的终端输入以下命令来调用该工具:
python bugbook.py --name="steve" "Annoying stack bug" "compile bug" "xcode" "annoying" "get meowed"
但我收到以下错误:
Traceback (most recent call last):
File "bugbook.py", line 22, in <module>
hello()
File "/Library/Python/2.7/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/Library/Python/2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/Library/Python/2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Library/Python/2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
TypeError: hello() got an unexpected keyword argument 'solutionnotes'
奇怪,我觉得。似乎此错误是由以下原因引起的:
if __name__ == '__main__':
hello()
实际上调用 main 函数的函数未能传入正确的参数或其他内容,但我已经尝试修补但无法使其正常工作。我错过了什么明显的东西??
令牌规范化
版本 2.0 中的新增内容。
从 Click 2.0 开始,可以提供用于规范化标记的函数。标记是选项名称、选择值或命令值。例如,这可用于实现不区分大小写的选项。
为了使用此功能,上下文需要传递一个执行标记规范化的函数。例如,您可以有一个将标记转换为小写的函数:
CONTEXT_SETTINGS = dict(token_normalize_func=lambda x: x.lower())
@click.command(context_settings=CONTEXT_SETTINGS)
@click.option('--name', default='Pete')
def cli(name):
click.echo('Name: %s' % name)