Gestion des exceptions Scala


La gestion des exceptions de Scala est similaire à celle d'autres langages tels que Java.

Les méthodes Scala peuvent mettre fin à l'exécution du code associé en lançant des exceptions sans renvoyer de valeur.


Lance une exception

Scala lève des exceptions de la même manière que Java, en utilisant la méthode throw, par exemple en lançant une nouvelle exception de paramètre :

throw new IllegalArgumentException

Catch exceptions

Le mécanisme de capture des exceptions est le même que dans les autres langages. Si une exception se produit, les clauses catch sont capturées dans l'ordre. Par conséquent, dans la clause catch, les exceptions les plus spécifiques doivent être placées en premier, et les exceptions plus générales doivent être placées plus tard. Si l'exception levée ne figure pas dans la clause catch, l'exception ne peut pas être gérée et sera transmise à l'appelant.

La clause catch pour intercepter les exceptions, la syntaxe n'est pas la même que dans les autres langages. Dans Scala, l'idée de correspondance de modèles est empruntée pour effectuer une correspondance d'exceptions. Par conséquent, dans le code catch, il y a une série d'instructions case, comme le montre l'exemple suivant :

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")
         }
      }
   }
}

Lorsque le code ci-dessus. est exécuté, le résultat de sortie est :

$ scalac Test.scala 
$ scala Test
Missing file exception

Le contenu de la clause catch est exactement le même que celui de match. Puisque les exceptions sont interceptées dans l'ordre, si l'exception la plus courante, Throwable, est écrite au début, les cas qui la suivent ne seront pas interceptés, elle doit donc être écrite à la fin.


instructionfinally

l'instructionfinally est utilisée pour exécuter les étapes qui doivent être exécutées, qu'il s'agisse d'un traitement normal ou lorsqu'une exception se produit :

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...")
      }
   }
}

Exécutez le code ci-dessus, le résultat de sortie est :

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