Menu
Coddy logo textTech

begin / rescue

Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 44 sur 56.

Pour empêcher une exception de faire planter votre programme, enrobez le code à risque dans un bloc begin ... rescue ... end. Si quelque chose à l'intérieur du begin lève une exception, Ruby passe directement au bloc rescue correspondant au lieu de s'arrêter.

begin
  result = 10 / 0
  puts result
rescue ZeroDivisionError
  puts "Cannot divide by zero!"
end
# Impossible de diviser par zéro !

Vous pouvez récupérer l'objet d'exception lui-même avec => e et lire son .message :

begin
  Integer("hello")
rescue ArgumentError => e
  puts "Bad input: #{e.message}"
end
# Bad input: invalid value for Integer(): "hello"

Si vous ne nommez pas de classe d'exception, rescue intercepte à lui seul StandardError et ses descendants, qui représentent la plupart des erreurs du quotidien. L'interception est particulièrement utile lorsque vous pouvez faire quelque chose dans le bloc rescue : substituer une valeur par défaut, enregistrer le problème dans les logs ou demander à nouveau à l'utilisateur.

challenge icon

Défi

Facile

Lisez deux lignes depuis l'entrée, les deux doivent être des entiers, mais la seconde pourrait ne pas être un nombre valide.

Englobez l'analyse de la seconde ligne dans un bloc begin / rescue :

  • Utilisez Integer(input) (qui lève une ArgumentError sur une mauvaise chaîne)
  • Si l'analyse réussit, affichez Sum: <a + b>
  • Si elle échoue, affichez Bad number!

Pour l'entrée 3 puis 4, la sortie est Sum: 7. Pour 3 puis abc, c'est Bad number!.

Essayez vous-même

a = gets.to_i
raw_b = gets.chomp

# TODO: begin/rescue autour de Integer(raw_b); afficher la somme ou le texte exact des instructions
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux

Entraînez-vous par vous-même : Compilateur Ruby en ligne