Scala 中的 try...catch

Mohammad Irfan 2023年1月30日
  1. 沒有 Try-Catch 塊的 Scala 程式碼
  2. 在 Scala 中使用 Try-Catch 塊來封裝可疑程式碼並處理異常
  3. 使用 Try-CatchFinally 塊在 Scala 的主體內執行程式碼
Scala 中的 try...catch

try-catch 塊是 Scala 中用於異常處理的基本處理程式塊。

exception 是一種異常情況或程式碼流,會導致共同決定並以意外輸出停止。

try 塊用於封裝可疑程式碼,catch 用於處理異常並提供必要的除錯細節。

沒有 Try-Catch 塊的 Scala 程式碼

在這種情況下,我們不使用 try-catch 塊並檢視如果我們的程式碼執行失敗會發生什麼。

class MyClass{
    def divide(a:Int, b:Int) = {
            a/b             // Exception occurred here
        println("Code is executing...")
    }
}
object MainObject{
    def main(args:Array[String]){
        var e = new MyClass()
        e.divide(100,0)
    }
}

輸出:

java.lang.ArithmeticException: / by zero
	at MyClass.divide(jdoodle.scala:4)

在這裡,使用者提供了錯誤的輸入,除以零編譯器意外停止執行。

在 Scala 中使用 Try-Catch 塊來封裝可疑程式碼並處理異常

在這裡,我們將可疑程式碼包含在 try 塊中,並提供 catch 處理程式的必要資訊。

如果發生任何異常,則 catch 處理程式的程式碼將僅執行。否則,程式碼通常會以所需的結果執行。

class MyClass{
    def divide(a:Int, b:Int) = {
            try{
            a/b
        }catch{
            case e: ArithmeticException => println(e)
        }
        println("Code is executing...")
    }
}
object MainObject{
    def main(args:Array[String]){
        var e = new MyClass()
        e.divide(10,0)
    }
}

輸出:

java.lang.ArithmeticException: / by zero
Code is executing...

使用 Try-CatchFinally 塊在 Scala 的主體內執行程式碼

無論程式碼中發生什麼異常,finally 塊都會在其主體內執行程式碼。

它保證在所有情況下都可以執行程式碼,除非是災難性的更改。

class MyClass{
    def divide(a:Int, b:Int) = {
            try{
            a/b
        }catch{
            case e: ArithmeticException => println(e)
        }finally{
            println("Finaly block always executes")
        }
        println("Code is executing...")
    }
}
object MainObject{
    def main(args:Array[String]){
        var e = new MyClass()
        e.divide(10,0)
    }
}

輸出:

java.lang.ArithmeticException: / by zero
Finaly block always executes
Code is executing...