La capture d’erreurs en Ruby
Vous souhaitez mettre votre solution en avant en haut de cet article ? Contactez-nous
Aujourd’hui, le blog du webdesign vous propose un résumé sur la façon de capturer les erreurs en ruby.
Dans la plupart (tous?) des langages modernes, il existe un système de capture d’erreurs, qui va permettre de définir simplement des manières gracieuses de gérer une erreur. Ruby ne fait heureusement pas exception.
L’outil principal pour cette tâche est begin. Il définit un bloc dans lequel les erreurs seront capturées. La capture s’effectue elle avec rescue.
begin # Do something wrong impossible_var = 1/0 rescue p 'quelque chose de grave est arrive' safe_exit end
Là, notre développeur tente une division par zéro, qui va lever une exception éponyme, et donc planter. Heureusement, la fonction safe_exit sera exécutée quand même, et notre programme aura le temps de mettre de l’ordre dans ses affaires avant de mourir. Cet exemple n’est pas très utile, mais si le 0 est une variable qui peut être égale a 0, on comprend l’intérêt.
Il est possible de capturer certaines erreurs seulement. Pour ça, il faut les indiquer dans le rescue. Notez évidemment que l’on est pas limité à un seul rescue par bloc.
begin # Do something rescue AnError, AnotherError => e p "something got wrong: #{e}" retry rescue ATerribleError p 'this is terribly wrong' exit ensure # This thing NEED to be executed end
Il y a plusieurs choses remarquables ici: Les types d’erreurs définies après le rescue filtre les erreurs capturées. Le => Après le premier rescue donne une variable (ici e) qui contiendra l’erreur, au cas où l’on veuille l’afficher, ou autre.
Le mot clé retry permet de réexécuter le code contenu dans le begin. Faites attention aux boucles infinies, ça arrive.
ensure, enfin, sera une portion de code qui sera toujours exécutée, que l’action soit sucessfull ou qu’elle plante.
Si vous comptez capturer toutes les erreurs possible, utilisez bien rescue => e, et pas rescue Exeption => e , sous peine de capturer aussi les messages d’interruption comme ^C. Votre programme en deviendrait impossible à eteindre.