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...