Menu
Coddy logo textTech

Clausole rescue multiple

Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 45 di 56.

Un blocco begin può avere diverse clausole rescue. Ruby le controlla dall'alto verso il basso ed esegue la prima la cui classe di eccezione corrisponde.

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

L’ordine è importante: elenca le classi specifiche prima di quelle generali. Se StandardError fosse collocato per primo, intercetterebbe tutto e i rami successivi non verrebbero mai eseguiti.

Puoi anche intercettare più classi di eccezioni in un unico ramo elencandole separate da virgole:

begin
  risky_call
rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"
end

Usalo quando il codice di recupero è lo stesso per diverse modalità di errore.

challenge icon

Sfida

Facile

Leggi due righe dall’input, entrambe destinate a essere numeri interi. Usa Integer(...) per entrambe, poi dividi la prima per la seconda.

Gestisci tre casi con rami rescue separati:

  • ArgumentError → stampa Bad number!
  • ZeroDivisionError → stampa Cannot divide by zero!
  • TypeError → stampa Wrong type!

Se tutto funziona, stampa Result: <a / b> (divisione intera).

Per l’input 10 / 2, l’output è Result: 5. Per 10 / 0, Cannot divide by zero!. Per 10 / abc, Bad number!.

Provalo tu

raw_a = gets.chomp
raw_b = gets.chomp

# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Ruby online