Scala 中的 try...catch

Mohammad Irfan 2023年1月30日 2022年5月18日
  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...