在这篇文章中提到:
如果你想捕获通常发生的“所有”错误,那么使用NonFatal:
import scala.util.control.NonFatal
try {
operation()
} catch {
case NonFatal(e) => errorHandler(e)
}
但我通常使用Exception
:
try {
operation()
} catch {
case e: Exception => errorHandler(e)
}
我想知道Scala中NonFatal
和Exception
之间的区别是什么?在Scala中,Exception
是否包括致命异常?
据我所知,在Java中,Exception
用于非致命错误,而Error
用于致命错误。Scala在Exception
方面与Java有何不同?
哪种方法是捕获非致命异常的正确方式?
NonFatal
和Exception
大致相同吗? - nulle: Exception
上匹配时,你正在检查异常的实际类型,就像 Java 中的catch (Exception e)
。如果异常是Exception
的子类,则异常将被捕获。另一方面,NonFatal
是一个提取器对象,它对匹配的值执行额外的逻辑。在这种情况下,只有当NonFatal.apply(e)
返回true
时,NonFatal(e)
才会匹配(并捕获异常)。当它返回true
时,你可以在上面的代码片段中看到。 - Vladimir MatveevInterruptedException
会在什么情况下发生?在Future{ .. }
块内的代码中,是否可能抛出InterruptedException
? - nullStackOverflow
是致命的。请参阅NonFatal文档。还有更多信息,请参见问题跟踪器和修复拉取请求和Google组讨论。 - abc123