首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >picocli异常行为是否已更改?

picocli异常行为是否已更改?
EN

Stack Overflow用户
提问于 2020-04-03 06:11:06
回答 1查看 183关注 0票数 3

我正在从picocli 3.9.6更新到4.2.0的过程中,当用新版本替换旧的废弃调用时,我遇到了一个问题。

在我的原始版本中,我有一个这样的代码块:

代码语言:javascript
复制
try {
    return commandLine.parseWithHandlers(
            new RunLast().useOut(ps),
            new ExceptionHandler(),
            args);
}
catch(Exception e) {
    // handle exceptions
}

ExceptionHandler同时处理参数和执行异常--两者都会被重新抛出,但参数异常会将帮助文本添加到异常文本中。例如,在命令被赋予错误的参数的情况下,捕获将被命中。捕获将确保在UI中打印错误。

我尝试像这样更新它:

代码语言:javascript
复制
try {
    commandLine.setOut(pw);
    ExceptionHandler handler = new ExceptionHandler();
    commandLine.setExecutionExceptionHandler(handler);
    commandLine.setParameterExceptionHandler(handler);
    commandLine.execute(args);
    return commandLine.getExecutionResult();
}
catch(Exception e) {
    // handle exceptions
}

在这个新版本中,异常像以前一样被抛出,但在被ExceptionHandler重新抛出后,它们不再被catch块捕获。如何捕获这些异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 10:22:14

picocli 4.x中的一个变化是新的execution框架。用户手册中有一个可能有用的section on migration

根据设计,CommandLine::execute方法从不抛出异常。因此,没有必要使用try/catch块来包围对CommandLine::execute的调用(除非需要捕获ErrorThrowable)。

相反,您可以有选择地指定自定义异常处理程序,就像您在示例中所做的那样。在这些异常处理程序中,您可以向用户显示错误消息。(可能是前一个ExceptionHandler中的内容和之前catch块中的逻辑的组合。)

当用户提供无效输入时,将调用ParameterExceptionHandler。默认处理程序显示一条错误消息,可能会为看起来像打字错误的选项或子命令建议替代拼写,最后显示用法帮助消息。用户手册的Handling Errors部分有一个示例ShortErrorMessageHandler,当使用帮助消息太长而使错误消息变得模糊时,该示例可能会很有用。

当业务逻辑抛出异常时,将调用ExecutionExceptionHandler。默认处理程序只是重新抛出异常,这会导致打印堆栈跟踪。用户手册的Business Logic Exceptions部分显示了另一种选择。

听起来您需要一个自定义ExecutionExceptionHandler来打印堆栈跟踪,后跟用法帮助消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61001974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档