2017-10-18 174 views
0

我有一个for循环,我期待IndexOutOfBoundsException。我想在引发这个特定异常时抛出一个自定义异常。目前,我有这样的:如何捕捉异常并抛出不同的异常

try { 
    for (i <- 0 until end) { 
    // do something 
    } 
} catch { 
    case e: IndexOutOfBoundsException => 
    throw CustomException("Raised expected IndexOutOfBoundsException", e) 
} 

然而,在运行上面的代码时,编译器会告诉我的IndexOutOfBoundsException升高和我的自定义异常。我需要做些什么来提高我的自定义异常?

自定义异常定义为:

case class CustomException(private val message: String = "", private val cause: Throwable = None.orNull) extends Exception(message, cause) 
+2

你可以发布你从编译器得到的异常吗?我得到一个'CusomException'使用这个。 – Shaido

+0

@Shaido我得到了IndexOutOfBounds异常,而不是自定义异常。 – franklin

+1

程序是否进入代码的catch部分?尝试调试/打印一些东西,看看是否是这种情况。我能想到的唯一的事情就是它通常是'抛出新的CustomException',带'new'关键字,但我认为这不重要。 – Shaido

回答

0

使用TryrecoverWithrecoverWith处理失败案例并进一步尝试传播新Try尝试计算的成功或失败。

Try { 
    for (i <- 0 until end) { 
    // do something 
    } 
}.recoverWith { case e: IndexOutOfBoundsException => 
Try.failed(CustomException("Raised expected IndexOutOfBoundsException", e)) 
}