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.
Défi
FacileLisez 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 uneArgumentErrorsur 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
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 - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir des tableaux 2DModèles 2D courantsRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Présentation du projetAjouter un livre9Gestion des erreurs
Qu'est-ce qu'une exception ?begin / rescueClauses rescue multiplesensure et raiseRécapitulatif - Calculatrice sécuriséeEntraînez-vous par vous-même : Compilateur Ruby en ligne