Scala:默默地捕获所有异常

tmp*_*ies 13 functional-programming scala exception try-catch

Scala中的空catch块似乎无效

try {
  func()
} catch {

} // error: illegal start of simple expression
Run Code Online (Sandbox Code Playgroud)

如何在没有处理的情况下捕获所有异常?

Rex*_*err 29

有些例外确实无法被捕获.无论如何你可以要求它:

try { f(x) }
catch { case _: Throwable => }
Run Code Online (Sandbox Code Playgroud)

但那可能不那么安全.

所有安全例外都匹配scala.util.control.NonFatal,因此您可以:

import scala.util.control.NonFatal
try { f(x) }
catch { case NonFatal(t) => }
Run Code Online (Sandbox Code Playgroud)

风险略低但仍然非常有用.

或者scala.util.Try可以为你做:

Try { f(x) }
Run Code Online (Sandbox Code Playgroud)

如果你想知道发生了什么,你可以对结果进行模式匹配.(但是,Try当你想要一个finally块时,它不能很好地工作.)

  • 这真的需要猫图片:默默地抓住所有例外! (3认同)

elm*_*elm 5

import scala.util.Try

val res = Try (func()) toOption 
Run Code Online (Sandbox Code Playgroud)

如果尝试成功,您将得到一个Some(value),如果失败,您将得到一个None