Scala 例外處理
Scala 的例外處理和其它語言例如 Java 類似。
Scala 的方法可以透過拋出異常的方法的方式來終止相關程式碼的運行,而不必透過傳回值。
拋出例外
Scala 拋出例外的方法和Java一樣,使用throw 方法,例如,拋出新的參數例外:
throw new IllegalArgumentException
捕捉異常
異常捕捉的機制與其他語言中一樣,如果有異常發生,catch字句是按次序捕捉的。因此,在catch字句中,越具體的異常越要靠前,越普遍的異常越靠後。 如果拋出的例外不在catch字句中,該異常則無法處理,會被升級到呼叫者處。
捕捉異常的catch子句,語法與其他語言中不太一樣。在Scala裡,借用了模式匹配的思想來做異常的匹配,因此,在catch的程式碼裡,是一系列case字句,如下例所示:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } catch { case ex: FileNotFoundException =>{ println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } }
執行以上程式碼,輸出結果為:
$ scalac Test.scala $ scala Test Missing file exception
catch字句裡的內容跟match裡的case是完全一樣的。由於異常捕捉是按次序,如果最普遍的異常,Throwable,寫在最前面,則在它後面的case都捕捉不到,因此需要將它寫在最後面。
finally 語句
finally 語句用來執行不管是正常處理或有例外發生時都需要執行的步驟,實例如下:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } catch { case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } finally { println("Exiting finally...") } } }
執行上述程式碼,輸出結果為:
$ scalac Test.scala $ scala Test Missing file exception Exiting finally...