Scala - Tratamento de exceções

As exceções do Scala funcionam como exceções em muitas outras linguagens como Java. Em vez de retornar um valor da maneira normal, um método pode terminar lançando uma exceção. No entanto, o Scala não tem exceções verificadas.

Quando você deseja manipular exceções, você usa um bloco try {...} catch {...} como faria em Java, exceto que o bloco catch usa correspondência para identificar e manipular as exceções.

Lançamento de exceções

Lançar uma exceção tem a mesma aparência que em Java. Você cria um objeto de exceção e o lança com othrow palavra-chave da seguinte forma.

throw new IllegalArgumentException

Captura de exceções

Scala permite que você try/catch qualquer exceção em um único bloco e, em seguida, execute a correspondência de padrões contra ele usando caseblocos. Experimente o programa de exemplo a seguir para lidar com a exceção.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comando

\>scalac Demo.scala
\>scala Demo

Resultado

Missing file exception

O comportamento deste try-catchexpressão é a mesma que em outras línguas, com exceções. O corpo é executado, e se lançar uma exceção, cadacatch cláusula é tentada por sua vez.

A cláusula final

Você pode envolver uma expressão com um finallycláusula se você quiser fazer com que algum código seja executado, independentemente de como a expressão termina. Experimente o seguinte programa.

Exemplo

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

Salve o programa acima em Demo.scala. Os seguintes comandos são usados ​​para compilar e executar este programa.

Comando

\>scalac Demo.scala
\>scala Demo

Resultado

Missing file exception
Exiting finally...