繁体   English   中英

未抛出异常时捕获异常

[英]Exception is caught when Exception is not thrown

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

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

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

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

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

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

希望这可以帮助!

祝你好运!

如果您试图捕获所有异常并希望避免此问题,则需要将捕获至少分成 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM