python - Click:如何使用 Click 自定义“错误:没有这样的命令 xx”错误处理?
问题描述
我有一个 Click 应用程序,我正在处理它,并且我想在调用未知的命令/子命令时自定义(从而覆盖)Click 的默认行为。
目前只有这个错误消息:Error: No such command xx
之后不再执行任何代码。
我的初始设置是这样的:
@click.group(cls=CustomHelpOrder)
@click.option('-v', '--verbose',is_flag=True)
def myapp_cli(verbose):
if verbose:
do_verbose()
else:
do_not_verbose()
@myapp_cli.command(help_priority=1, short_help='Foo my project')
@click.option('--bar')
def baz(bar: str) -> None:
"""
Do something
"""
do_something(bar)
所以我想做的是:
- 检查是否引发了上述(特殊)异常。(也许如果用户键入
bat
而不是baz
) - 如果是,我想保存这个未知命令(比如
bat
(而不是仅仅打印默认消息并退出)并将其用于进一步处理(比如将其传递给各种函数(可能作为字符串))
我尝试过,
try:
myapp_cli()
except Click.Exception:
handleExc()
但我无法弄清楚如何做到这一点,因为如果命令未知,应用程序就会退出(我认为在任何东西都可以捕获它之前;一种非常幼稚的方法)。我想知道我是否必须以某种方式覆盖默认行为,但由于我对 Click 很陌生,我不知道如何。
我会感谢任何帮助。
解决方案
嗨法文特,欢迎!
您可以实现自己的自定义组。来自Click 的手册:
class AliasedGroup(click.Group):
def get_command(self, ctx, cmd_name):
rv = click.Group.get_command(self, ctx, cmd_name)
if rv is not None:
return rv
matches = [x for x in self.list_commands(ctx)
if x.startswith(cmd_name)]
if not matches:
return None
elif len(matches) == 1:
return click.Group.get_command(self, ctx, matches[0])
ctx.fail('Too many matches: %s' % ', '.join(sorted(matches)))
在上面的代码段中,您可以编辑以下部分来处理您的Command not found
情况,但您可以。
if not matches:
# your custom logic for `Command not found` goes here
希望能帮助到你!
推荐阅读
- webpack - 如何避免在生产构建中给出垃圾名称
- python - 如何在 Mac 上正确安装 virtualenvwrapper?
- reactjs - 我有一个 react native 组件,我正在尝试通过 connect 将该组件连接到 react-redux,但出现错误
- android - 可运行与服务;用用例解释寿命
- javascript - 将文件从输入元素传递到 plupload(添加文件夹)
- ios - 这里有人知道如何解决“传递给不带参数的调用的参数”吗?
- html - 如何在标题上方制作段落层
- android - 每 5 分钟添加一次价值并重置 textview
- wordpress - Wordpress 的图像遮罩模块
- p5.js - 错误创建画布未定义-尝试保存示例项目时