Qu'est-ce qu'une exception ?
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 43 sur 56.
Lorsque quelque chose ne va pas au moment de l'exécution, comme diviser par zéro, analyser "abc" comme un entier ou appeler une méthode sur nil : Ruby lève une exception. Le programme s'arrête, et Ruby affiche ce qui s'est passé ainsi que l'endroit où cela s'est produit.
10 / 0
# ZeroDivisionError: divisé par 0Chaque type d'échec est sa propre classe. En voici quelques-uns courants :
ZeroDivisionError: division d'un entier par zéroArgumentError: mauvais arguments passés à une méthode (Integer("abc"))
NoMethodError: appel d'une méthode que le receveur ne possède pas (nil.upcase)TypeError: opération sur le mauvais type d'objet ("a" + 1)
Chaque classe d'exception possède un .message : la description lisible par l'homme que Ruby affiche lorsque l'exception n'est pas gérée. Les prochaines leçons montrent comment intercepter ces exceptions afin que votre programme continue de s'exécuter.
Défi
DébutantLisez une seule ligne d'entrée, un nom d'expression Ruby. Affichez le nom de la classe d'exception que Ruby lèverait pour celle-ci. Utilisez une instruction case (aucune levée d'exception réelle n'est nécessaire) :
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- tout autre chose →
Unknown
Pour l'entrée nil-method, la sortie est NoMethodError.
Aide-mémoire
Lorsque quelque chose se passe mal à l'exécution, Ruby lève une exception et le programme s'arrête. Classes d'exception courantes :
ZeroDivisionError: division d'un entier par zéroArgumentError: mauvais arguments (par ex.Integer("abc"))NoMethodError: appel d'une méthode que le receveur ne possède pas (par ex.nil.upcase)TypeError: opération sur le mauvais type d'objet (par ex."a" + 1)
10 / 0
# ZeroDivisionError : division par 0Chaque objet d'exception possède un .message avec une description lisible par l'homme.
Essayez vous-même
kind = gets.chomp
# À FAIRE : case kind ... afficher le nom de la classe d'exception correspondante
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ée