Les exceptions
Qu'est ce qu'une exception ?
Une exception intervient quand le programme rencontre une difficulté, une erreur ...
Nous allons prendre deux exemples simples.
- Division par zéro
- Appelle d'une méthode de nombres d'argument différent.
1) Exemple 1 : Division par zéro
Tout le monde le sait (même votre calculatrice favorite) que 1 divisé par 0 est impossible et donc, en informatique fera une erreur. Essayez avec irb :

Et voilà, on a notre exception : ZeroDivisionError ! Lorsque Ruby remarque une division par 0, il lance cette exception.
Nous allons gérer les erreurs ... voici la syntaxe :
Le bloc doit commencer par "begin" et terminer par "end". Maintenant, on doit spécifier le type d'erreur dans ce bloc.
Le code est assez clair, non ? :). Lorsque une expression ZeroDivisionError est lancée, cela éxécute "rescue" et se termine par "ensure".
Cela affichera donc "Vous ne pouvez pas diviser par zero" :)
2) Exemple 2 : Appelle d'une méthode de nombres d'argument différent.
Jugez vous même ... il manque un argument et Ruby nous lance une erreur :

Et tac ! une autre exception : ArgumentError
Le principe est donc le même que le premier exemple :
3) Récapitulatif
Alors pour résumé, voici la syntaxe générale :
4) Quelles sont les exceptions existantes ?
Le fichier d'aide de RPG Maker XP/VX nous donne toutes les exceptions :
NoMemoryError
Lancée quand trop de mémoire est tentée d'être alloué à la fois.
ScriptError
Indique une erreur de script.
NotImplementedError Lancée quand une donnée non implémentée est invoquée.
SyntaxError
Lancée par une erreur de syntaxe.
StandardError
Sans classe spécifiée, la classe de secours attrapera la sous-classe de cette classe d'exception.
ArgumentError
Lancée lorsque le nombre d'argument ne correspond pas ou lorsque les valeurs sont incorrectes.
IndexError
Lancée si l'index est hors de portée.
IOError
Lancée lorsqu'est générée une erreur d'entrée/sortie.
EOFError
Lancée lorsque l'EOF (Fin de fichier) a été atteint.
LocalJumpError
Lancée quand la destination du jump n'a pas été trouvé dans la structure de contrôle.
NameError
Lancée lorsque on accède à une variable ou constante indéfinie.
NoMethodError
Lancée lorsque on appelle une méthode indéfinie.
RangeError
Une exception de portée. Lancée lors d'une conversion d'un entier hors de portée se produit (depuis un Bignum à un Fixnum) , etc.
FloatDomainError
Lancée lors d'une tentative de conversion d'un nombre infini positif ou négatif ou PuN(Pas un Nombre) en un Bignum ou lors de la comparaison d'un nombre avec un PuN.
RegexpError
Lancée lorsque une compilation d'une expression régulière échoue.
RuntimeError
Une Exception d'éxecution. Lancée lors de l'appel d'un raise sans spécifier d'exception.
SystemCallError
Lancée lorsqu'un appel système échoue.
Errno::EXXX
Classe d'Exception pour chaque errno(numéro d'erreur). Voir le module Errno pour plus d'info sur chaque nom de classe.
SystemStackError
Lancée lorsque le niveau de la pile est trop élevé.
TypeError
Lancée quand un mauvais type est invoqué.
ZeroDivisionError
Lancée lors d'une division par zéro.
SystemExit
Termine le programme. Lorsque "exit" est appelé, Ruby lance cette exception
fatal
Une erreur fatale(Interne). Cet objet n'est pas visible avec les méthodes normales.

