begin / rescue
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 44 di 56.
Per evitare che un’eccezione faccia arrestare il programma, racchiudi il codice rischioso in begin ... rescue ... end. Se qualcosa all’interno di begin genera un’eccezione, Ruby passa al blocco rescue corrispondente invece di interrompere l’esecuzione.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# Impossibile dividere per zero!Puoi ottenere l’oggetto eccezione stesso con => e e leggerne il .message:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Input non valido: valore non valido per Integer(): "hello"Se non indichi una classe di eccezione, rescue da solo intercetta StandardError e le sue sottoclassi, cioè la maggior parte degli errori quotidiani. L'intercettazione è più utile quando puoi fare qualcosa nel blocco rescue: sostituire un valore predefinito, registrare il problema, chiedere di nuovo all'utente.
Sfida
FacileLeggi due righe dall'input: entrambe dovrebbero essere numeri interi, ma la seconda potrebbe non essere un numero valido.
Racchiudi l'analisi della seconda riga in begin / rescue:
- Usa
Integer(input)(che sollevaArgumentErrorse la stringa non è valida) - Se l'analisi riesce, stampa
Sum: <a + b> - Se non riesce, stampa
Bad number!
Per l'input 3 seguito da 4, l'output è Sum: 7. Per 3 seguito da abc, l'output è Bad number!.
Provalo tu
a = gets.to_i
raw_b = gets.chomp
# TODO: usa begin/rescue attorno a Integer(raw_b); stampa la somma o il testo esatto delle istruzioni
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