English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El manejo de excepciones en Scala es similar a otros lenguajes como Java.
Scala puede detener la ejecución del código relacionado mediante el lanzamiento de excepciones, sin necesidad de regresar un valor.
El método para lanzar excepciones en Scala es similar al de Java, se utiliza el método throw, por ejemplo, lanzar una nueva excepción de argumento:
throw new IllegalArgumentException
El mecanismo de captura de excepciones es similar en otros lenguajes. Si ocurre una excepción, la cláusula catch la captura en orden. Por lo tanto, en la cláusula catch, las excepciones más específicas deben estar más adelante y las más generales más adelante. Si la excepción lanzada no está en la cláusula catch, la excepción no se puede manejar y se eleva al llamador.
La cláusula catch para la captura de excepciones es bastante diferente en otros lenguajes. En Scala, se utiliza el pensamiento de coincidencia de patrones para hacer coincidir las excepciones, por lo que, en el código de catch, hay una serie de cláusulas case, como se muestra en el siguiente ejemplo:
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("Excepción de archivo perdido") } case ex: IOException => { println("Excepción de E/S") } } } }
Ejecutar el código siguiente, el resultado de salida será:
$ scalac Test.scala $ scala Test Excepción de archivo perdido
El contenido de la cláusula catch es completamente idéntico a los casos en la coincidencia de patrones. Debido a que la captura de excepciones se realiza en orden, si se escribe la excepción más común, Throwable, al principio, entonces los casos posteriores no pueden capturarlos, por lo que debe escribirse al final.
La sentencia finally se utiliza para ejecutar pasos que deben realizarse ya sea que se realice el procesamiento normal o se genere una excepción, ejemplo a continuación:
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("Excepción de archivo perdido") } case ex: IOException => { println("Excepción de E/S") } } finally { println("Exiting finally...") } } }
Ejecutar el código siguiente, el resultado de salida será:
$ scalac Test.scala $ scala Test Excepción de archivo perdido Exiting finally...