不抛出异常时捕获异常

时间:2015-11-16 06:22:06

标签: java exception findbugs

我有以下代码,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);
                }
    }

2 个答案:

答案 0 :(得分:5)

这是一个非常有名的蠢货警告,

根据官方文档,这种警告是在

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

要了解更多信息(以及解决方案),您可以查看official documentation

对于您的情况,似乎try子句中的语句不会抛出您在catch子句中处理的异常

希望这有帮助!

祝你好运!

答案 1 :(得分:0)

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

Discussed here as well

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);
}