Scala - Gestion des exceptions

Les exceptions de Scala fonctionnent comme des exceptions dans de nombreux autres langages comme Java. Au lieu de renvoyer une valeur de la manière normale, une méthode peut se terminer en lançant une exception. Cependant, Scala n'a pas réellement vérifié les exceptions.

Lorsque vous souhaitez gérer des exceptions, vous utilisez un bloc try {...} catch {...} comme vous le feriez en Java, sauf que le bloc catch utilise la correspondance pour identifier et gérer les exceptions.

Lancer des exceptions

Lancer une exception ressemble à celui de Java. Vous créez un objet d'exception, puis vous le lancez avec lethrow mot-clé comme suit.

throw new IllegalArgumentException

Attraper les exceptions

Scala vous permet de try/catch toute exception dans un seul bloc, puis effectuez une correspondance de modèle avec celle-ci en utilisant caseblocs. Essayez l'exemple de programme suivant pour gérer l'exception.

Exemple

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Demo {
   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")
         }
      }
   }
}

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

Missing file exception

Le comportement de ce try-catchexpression est la même que dans les autres langues à quelques exceptions près. Le corps est exécuté, et s'il lève une exception, chaquecatch la clause est essayée à son tour.

La clause enfin

Vous pouvez envelopper une expression avec un finallyclause si vous souhaitez que du code s'exécute quelle que soit la façon dont l'expression se termine. Essayez le programme suivant.

Exemple

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

Missing file exception
Exiting finally...