English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O tratamento de exceções no Scala é semelhante a outros idiomas, como Java.
O método pode ser usado no Scala para interromper a execução do código relacionado, sem a necessidade de retornar um valor.
O método de lançamento de exceções no Scala é semelhante ao Java, usando o método throw, por exemplo, lançar uma nova exceção de argumento:
throw new IllegalArgumentException
O mecanismo de captura de exceções é semelhante a outros idiomas. Se ocorrer uma exceção, a cláusula catch é capturada por ordem. Portanto, na cláusula catch, as exceções mais específicas devem ser capturadas mais cedo e as exceções mais gerais mais tarde. Se a exceção lançada não estiver na cláusula catch, a exceção não pode ser tratada e será elevada ao chamador.
A cláusula catch para capturar exceções é um pouco diferente de outros idiomas. No Scala, é utilizado o pensamento de correspondência de padrão para fazer correspondência de exceções, portanto, no código da cláusula catch, é uma série de frases case, conforme o exemplo a seguir:
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("Exceção de Arquivo Ausente") } case ex: IOException => { println("Exceção IO") } } } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test Exceção de Arquivo Ausente
O conteúdo da cláusula catch é idêntico ao dos casos da cláusula match. Devido ao fato de que a captura de exceções é feita em ordem, se a exceção mais genérica, Throwable, for escrita no início, todas as outras exceções subsequentes não serão capturadas, portanto, deve ser escrita no final.
A sentença finally é usada para executar passos que precisam ser executados tanto em caso de tratamento normal quanto em caso de exceção, exemplo a seguir:
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("Exceção de Arquivo Ausente") } case ex: IOException => { println("Exceção IO") } } finally { println("Saindo finalmente...") } } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test Exceção de Arquivo Ausente Saindo finalmente...