La gestion d'erreurs

Les langages interprétés de haut niveau n'offrent pas que des avantages, notamment du point de vue de la rapidité. En effet dans un langage interprété comme Neon, l'interpréteur contrôle des tas de choses en plus qu'exécuter purement et simplement votre programme.


Mais le fait que l'interpréteur contrôle tout le fil d'exécution peut parfois se révéler être un avantage.

En effet lorsque vous commettez des erreurs de programmation, c'est l'interpréteur qui va detecter votre erreur avant qu'elle n'impacte l'OS.


 L'interpréteur va alors pouvoir afficher un gentil message d'erreur, et dans de cas de certains langages de programmation, va même pouvoir vous indiquer à quelle ligne du programme cette erreur a eu lieu. C'est donc un gros avantage pour les programmeurs, par rapport aux langages compilés bas niveau.

 

 Mais ce n'est pas tout. Étant donné que l'interpréteur a la main mise sur toutes les erreurs, il peut également vous donner la possibilité de les intercepter vous-même, et d'en déclencher spécialement quand vous en avez envie.

 

C'est pourquoi Neon est doté d'un type supplémentaire, appelé le type Exception. Une exception est tout simplement un mot clé représentant un type d'erreurs particulier.

Par exemple ici, les erreurs de syntaxe déclenchent l'exception SyntaxError.

Un certain nombre d'exceptions sont définies de base par Neon, comme SyntaxError, UndefinedVariable, OutOfRange...

Cependant, Neon fournit également une fonction pour créer vos propres exceptions : la fonction create_exception.


Cette fonction prend en argument le nom de l'exception dans une chaine de caractères, et renvoie l'exception ainsi créée. Vous pouvez donc récupérer le résultat de create_exception dans une variable si vous voulez.


Cependant ce n'est pas très utile, car le simple fait d'exécuter la fonction va définir une exception que vous pourrez directement manipuler avec le nom que vous lui avez donné.

« Mais à quoi servent les exceptions ? »


Maintenant nous allons voir un nouveau type de blocs de code : les blocs try/except.


La syntaxe d'utilisation est la suivante :


try

   code...

except (exception1, exception2, ...) do

    code...

end


À quoi servent-ils ?


Comme je l'ai dit plus haut, il est parfois utile de pouvoir attraper les erreurs levées par l'interpréteur, et de l'empêcher d'arrêter le programme.

Le principe est simple : le code contenu dans le try est exécuté normalement. Si une erreur survient dans le try, l'exécution s'arrête, et reprend avec le code contenu dans le except. Si une erreur survient dans le bloc except, alors l'interpréteur lèvera normalement cette erreur.


Vous l'avez remarqué, le bloc except prend en argument des exceptions. Si vous ne mettez rien dans les parenthèses, pour n'importe quelle erreur dans le try, le bloc except sera exécuté. Sinon, il ne sera exécuté que dans le cas où l'exception levée figure parmi les execptions données en argument de except.

Maintenant c'est bien beau de pouvoir créer des exceptions, mais il faut pouvoir choisir quand les déclencher.


Pour cela il existe la fonction exception, qui fait quitter le programme, en levant l'exception donnée en argument.