Scala异常处理

Scala的异常处理和其它语言比如Java类似,一个方法可以通过抛出异常的方法而不返回值的方式终止相关代码的运行。调用函数可以捕获这个异常作出相应的处理或者直接退出,在这种情况下,异常会传递给调用函数的调用者,依次向上传递,直到有方法处理这个异常。

Scala中的所有异常都是未检查的;没有检查异常的概念。Scala在选择是否捕获异常方面提供了很大的灵活性。

抛出异常在Scala和Java中是一样的。

import scala.io.Source
import java.io.FileNotFoundException

try {
    val line = Source.fromFile("./wc.txt").mkString
    val ret = 1 / 0
    println(line)
} catch {
    case fNFE:FileNotFoundException => {
        println("FileNotFoundException:文件找不到了,传的路径有误。。。")
    }
    case e:Exception => {
        println("Exception: " + e.getMessage)
    }
    case _ : Throwable => {
        println("default处理方式")
    }
} finally {
   println("this is 必须要执行的语句")
}

Scala中的try/catch结构与Java不同,因为Scala中的try/catch是一个表达式,它会产生一个值,而且Scala中的异常可以在catch块中进行模式匹配,而不是为每个不同的异常提供单独的catch子句。因为Scala中的try/catch是一个表达式,所以如果调用失败,可以将调用包装在try/catch中,并赋值一个默认值。

下面的代码在try/catch中包装调用并在调用失败时分配默认值:

try{
    Integer.parseInt("dog")
}catch{
    case_ => 0
}

《PySpark原理深入与编程实战》