English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Exception Handling

Das Ausnahmebehandlung in Scala ist ähnlich wie in anderen Sprachen wie Java.

Methoden in Scala können durch das Auslösen von Ausnahmen das Ausführen von Code beenden, ohne dass ein Rückgabewert erforderlich ist.

Ausnahme auslösen

Scala verwendet wie Java Methoden, um Ausnahmen auszulösen, z.B. eine neue Parameterausnahme auslösen:

throw new IllegalArgumentException

Ausnahme erfassen

Das Mechanismus der Ausnahmeerkennung ist ähnlich wie in anderen Sprachen. Wenn eine Ausnahme auftritt, wird der catch-Teil in der Reihenfolge erkannt. Daher sollte der spezifischere Ausnahmeinhalt weiter vorne und der allgemeine Ausnahmeinhalt weiter hinten im catch-Teil stehen. Wenn die ausgelöste Ausnahme nicht im catch-Teil aufgeführt ist, kann die Ausnahme nicht behandelt werden und wird an den Aufrufer weitergeleitet.

Der catch-Teil, der Ausnahmen fängt, hat eine andere Syntax als in anderen Sprachen. In Scala wird das Musterabgleichskonzept verwendet, um Ausnahmen abzugleichen, daher ist der catch-Code eine Reihe von case-Sätzen, wie im folgenden Beispiel gezeigt:

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")
      }
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      }
   }
}

Execute the following code, the output will be:

$ scalac Test.scala 
$ scala Test
Missing file exception

The content in the catch clause is exactly the same as the case in the match. Since exception handling is ordered, if the most general exception, Throwable, is written first, then the cases after it will not be caught. Therefore, it needs to be written at the end.

finally statement

The finally statement is used to execute steps that need to be executed whether the normal processing or an exception occurs, as shown below:

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")
      }
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      } finally {
         println("Exiting finally...")
      }
   }
}

Execute the following code, the output will be:

$ scalac Test.scala 
$ scala Test
Missing file exception
Exiting finally...