Scala - Gestione delle eccezioni

Le eccezioni di Scala funzionano come le eccezioni in molti altri linguaggi come Java. Invece di restituire un valore nel modo normale, un metodo può terminare generando un'eccezione. Tuttavia, Scala in realtà non ha controllato le eccezioni.

Quando si desidera gestire le eccezioni, si utilizza un blocco try {...} catch {...} come si farebbe in Java, tranne per il fatto che il blocco catch utilizza la corrispondenza per identificare e gestire le eccezioni.

Lanciare eccezioni

La generazione di un'eccezione ha lo stesso aspetto di Java. Crei un oggetto eccezione e poi lo lanci con ilthrow parola chiave come segue.

throw new IllegalArgumentException

Catturare le eccezioni

Scala te lo permette try/catch qualsiasi eccezione in un singolo blocco e quindi eseguire la corrispondenza del modello su di essa utilizzando caseblocchi. Prova il seguente programma di esempio per gestire l'eccezione.

Esempio

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

Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Missing file exception

Il comportamento di questo try-catchl'espressione è la stessa di altre lingue con eccezioni. Il corpo viene eseguito e, se genera un'eccezione, ciascunocatch clausola viene provata a sua volta.

L'ultima clausola

Puoi racchiudere un'espressione con un finallyse si desidera che venga eseguito del codice indipendentemente da come termina l'espressione. Prova il seguente programma.

Esempio

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

Salvare il programma sopra in formato Demo.scala. I seguenti comandi vengono utilizzati per compilare ed eseguire questo programma.

Comando

\>scalac Demo.scala
\>scala Demo

Produzione

Missing file exception
Exiting finally...