Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Leggi 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 solleva ArgumentError se 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
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