Scala:如何在库中创建异常以冒泡到调用该库的应用程序?

时间:2018-08-20 22:46:07

标签: scala

在我当前的代码中,我有一个try / catch异常,我想让异常冒泡到调用的应用程序:

    try{
        // Do stuff
    } catch {
      case _: Exception => throw new CustomException("Exception")
    }
case class CustomException(s: String)  extends Exception(s)

这是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

:抛出自定义异常将有助于识别错误的来源,即错误来自您的库,而没有其他地方。

不太好:您当前正在抛弃Do stuff代码引发的原始异常中的所有信息。您可以将原始错误文本合并到CustomException构造函数中。

:例外的一个大问题是,通常来说,不需要客户端代码即可捕获它们。引发的异常将继续展开调用堆栈,直到捕获到该堆栈为止;否则,整个程序将终止。 Scala Try类型专门用于解决此问题。

import util.Try

def libMethod(/*args*/) :Try[Int] = Try {
  // Do stuff that should return Int
  // but might throw an exception.
}

使用此方法,调用代码无法忽略可能的错误,因为它现在已成为返回类型的一部分。