Les exceptions sont un élément important dans la programmation car elles permettent de gérer les problèmes qui pourraient avoir lieu pendant l'éxécution de notre script.
Capturer une exception
Lorsque l'on éxécute du code certaines erreurs peuvent arriver. Par exemple si vous essayez de diviser un chiffre par 0, ruby vous renverra une erreur ZeroDivisionError
et arrètera l'éxécution du script. Dans certains cas nous allons chercher à capturer l'erreur pour effectuer une opération spécifique à la place (comme afficher un message d'erreur à l'utilisateur par exemple).
Dans ce cas là on entourera notre code d'une instruction begin
.
begin
# -
rescue ZeroDivisionError
# -
rescue UnAutreTypeDException
# -
rescue Exception
# Tous les autres types d'exceptions ici
end
Il est possible d'utiliser plusieurs rescue afin de gérer plusieurs types d'erreurs. Il est aussi possible de récupérer l'erreur dans une variable.
begin
rescue ZeroDivisionError => e
puts e.message
puts e.backtrace.inspect
rescue UnAutreTypeDException
# -
rescue Exception
# Tous les autres types d'exceptions ici
end
Renvoyer une Exception
Quand on va écrire notre code on va parfois se trouver dans des situations générant des erreurs. Dans ce cas là il est important d'être en mesutre de renvoyer une exception, qui pourra ensuite être récupérée. Pour cela on utilise la méthode raise.
def ajouterNote(note)
raise "Impossible d'ajouter une note qui n'est pas un chiffre" if !note.respond_to? :to_i
notes << note
end
Il est aussi possible de renvoyer un type d'erreur particulier afin de pouvoir la capturer plus simplement dans le cadre d'un begin.
class AjoutNoteError < RuntimeError
def initialize(msg = "Impossible d'ajouter la note pour la raison suivante : ...")
super
end
end
def ajouterNote(note)
raise AjoutNoteError if !note.respond_to? :to_i
notes << note
end