未抛出异常时捕获异常

问题描述 投票:0回答:2

我有以下代码,findbugs 抱怨“

Exception is caught when Exception is not thrown
”在不可靠的代码下。我不明白如何解决这个问题。
getPMMLExportable
抛出
MLPMMLExportException

public String exportAsPMML(MLModel model) throws MLPmmlExportException {
    Externalizable extModel = model.getModel();

    PMMLExportable pmmlExportableModel = null;

    try {
        pmmlExportableModel = ((PMMLModelContainer) extModel).getPMMLExportable();
    } catch (MLPmmlExportException e) {
       throw new MLPmmlExportException(e);
    }
}
java exception findbugs
2个回答
14
投票

这是一个非常著名的 findbug 警告,

根据官方文档,这种警告是在以下情况下生成的:

  • 方法使用 try-catch 块来捕获 Exception 对象,但 Exception 不会在 try 块内抛出。
  • 有时当我们使用
    catch(Exception e)
    一次捕获所有类型的异常时也会抛出它,它可能会掩盖实际的编程问题,因此findbugs要求您捕获特定的异常,以便可以抛出运行时异常来表明编程问题.

为了获得更多理解(以及解决方案),您可以查看官方文档

对于您的情况,

try
子句中的语句似乎不会引发您在
catch
子句中处理的异常

希望这有帮助!

祝你好运!


0
投票

如果您尝试捕获所有异常,并希望避免此问题,则需要将捕获分成至少 2 个块。一种简单的方法是在一个块中捕获运行时异常,并在另一个块中捕获所有其他异常。

也在这里讨论

try {
  // Do stuff here, like process json, which might throw a json processing error
} catch (RuntimeException e) {
  throw new RuntimeException("Couldn't process stuff", e);
} catch (Exception e) {
  throw new RuntimeException("Something failed!", e);
}
© www.soinside.com 2019 - 2024. All rights reserved.