Clauses rescue multiples
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 45 sur 56.
Un bloc begin peut avoir plusieurs clauses rescue. Ruby les vérifie de haut en bas et exécute la première dont la classe d’exception correspond.
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’ordre compte : liste les classes spécifiques avant les classes générales. Si StandardError était placé en premier, il intercepterait tout et les branches suivantes ne seraient jamais exécutées.
Vous pouvez également intercepter plusieurs classes d’exceptions dans une même branche en les listant avec des virgules :
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endUtilisez ceci lorsque le code de récupération est le même pour plusieurs modes d’échec.
Défi
FacileLisez deux lignes de l’entrée, toutes deux censées être des entiers. Utilisez Integer(...) pour les deux, puis divisez le premier par le second.
Gérez trois cas avec des branches rescue distinctes :
ArgumentError→ affichezBad number!ZeroDivisionError→ affichezCannot divide by zero!TypeError→ affichezWrong type!
Si tout fonctionne, affichez Result: <a / b> (division entière).
Pour l’entrée 10 / 2, la sortie est Result: 5. Pour 10 / 0, Cannot divide by zero!. Pour 10 / abc, Bad number!.
Essayez vous-même
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
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
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - Tisseur de chaînes4Blocs, Procs et Lambdas
Qu'est-ce qu'un bloc ?do..end ou accoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes, 2e partie
Hash.new avec valeurs par défautParcourir les hashesHashes imbriquésFusionner et transformerRécapitulatif - Compteur de fréquences10Projet - Dossiers des étudiants
Présentation du projetAjouter un étudiant2Plages
Qu’est-ce qu’une plage ?Méthodes des plagesPlages dans Case / WhenRécapitulatif - Exercices sur les plages5Puissance des Enumerable
Select et RejectChaînage de MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Pipeline de données3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir les tableaux 2DMotifs courants en 2DRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Vue d’ensemble du projetAjouter un livre9Gestion des erreurs
Qu’est-ce qu’une exception ?begin / rescueClauses rescue multiplesensure et raiseRécapitulatif - Calculatrice sûreEntraînez-vous par vous-même : Compilateur Ruby en ligne