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."
endL’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}"
endUsalo quando il codice di recupero è lo stesso per diverse modalità di errore.
Sfida
FacileLeggi 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→ stampaBad number!ZeroDivisionError→ stampaCannot divide by zero!TypeError→ stampaWrong 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Panoramica dei metodi delle stringheInterpolazione di stringheIterare sulle stringheDividere e unireRiepilogo - Tessitore di stringhe4Blocchi, Proc e Lambda
Che cos’è un Block?do..end vs parentesi graffeLa keyword yieldParametri del BlockProc e LambdaRiepilogo - Iteratore personalizzato7Hash in Ruby - Parte 2
Hash.new con valori predefinitiIterare sugli hashHash annidatiUnire e trasformareRipasso - Contatore di frequenza10Progetto - Registri degli studenti
Panoramica del progettoAggiungere uno studente2Intervalli
Che cos'è un intervallo?Metodi degli intervalliIntervalli in Case / WhenRiepilogo - Esercitarsi con gli intervalli5La potenza di Enumerable
Select e RejectConcatenare MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRiepilogo - Pipeline di dati3Array bidimensionali
Basi degli array 2DAccesso agli elementi 2DIterare sugli array 2DPattern comuni con array 2DRiepilogo - Operazioni sulle matrici6Progetto - Gestore della biblioteca
Panoramica del progettoAggiungere un libro9Gestione degli errori
Che cos’è un’eccezione?begin / rescueClausole rescue multipleensure e raiseRipasso - Calcolatrice sicuraEsercitati da solo: Compilatore Ruby online