【发布时间】:2020-07-15 00:54:35
【问题描述】:
我正在从 picocli 3.9.6 更新到 4.2.0,在用新版本替换旧的弃用调用时遇到了问题。
在我的原始版本中,我有一个这样的代码块:
try {
return commandLine.parseWithHandlers(
new RunLast().useOut(ps),
new ExceptionHandler(),
args);
}
catch(Exception e) {
// handle exceptions
}
ExceptionHandler 处理参数异常和执行异常——两者都被重新抛出,但参数异常会将帮助文本添加到异常文本中。在某些情况下,例如,一个命令被赋予了错误的参数,catch 就会被击中。 catch 将确保在 UI 中打印错误。
我试图像这样更新它:
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 块捕获。如何捕获这些异常?
【问题讨论】:
-
看来我现在应该通过退出代码而不是异常来执行此操作。或者也许我不需要自定义异常处理程序来将帮助文本添加到执行结果中?