"Il y a quelque chose à dire en faveur de l'exception, pourvu qu'elle ne veuille jamais devenir la règle". Friedrich Nietzsche
Qu'est-ce que la gestion des exceptions ? En programmation, un système de gestion des exceptions (SGE) est un système qui permet de gérer des conditions exceptionnelles lors de l'exécution d'un logiciel. Ces conditions exceptionnelles ne sont pas des bogues, mais ne pas les traiter sera considéré comme une faute de programmation. Par exemple, le processus
ne pourra ouvrir un fichier. Si une exception se manifeste, le pointeur d'exécution du processus est détourné pour exécuter des traitements liés à cette erreur. Le premier langage qui a prévu ce genre de traitement est le PL1 (Programming Language number 1) qui a été conçu fin des années 60 par IBM. De nos jours, la majorité des langages de programmation modernes disposent d'un SGE (comme C++, C#, Java, Python, etc.). Et si les exceptions n'existaient pas ? Nous avons vu dans la définition du SGE qu'il s'agit de gérer des conditions d'exécutions spéciales. Nous ne parlons donc pas ici d'erreurs détectables par le compilateur et/ou l’éditeur des liens (comme une erreur de syntaxe par exemple) ; mais bien d'erreurs se présentant exceptionnellement selon certaines circonstances. Par exemple, si un calcul provoque une division par zéro, ou bien si votre programme tente un accès illégal en dehors des bornes d’un tableau, etc. Si votre logiciel ne peut traiter ce genre d'erreurs immédiatement lorsqu'elles se produisent, alors votre programme plantera/bloquera, ou produira des résultats indéterminés. Si les exceptions n'existent pas dans votre langage il est nécessaire de gérer tous les cas de figure par le biais d'itératives. Suivant la nature de l'erreur, le programmeur décidera alors de poursuivre, ou bien d'arrêter le programme. Par exemple, en C il n'y a pas de SGE, et le développeur doit passer par des tests conditionnels, ou recourir à la macro assert. Mais des tests conditionnels comportent au moins deux désavantages : 1 il n'y a pas de traitement qui soit directement relié à une erreur, et rien n'oblige un programmeur de vérifier à chaque fois le code retour d’une fonction ; 2 dans le cas spécifique du C et d'abort vous ne pourrez pas fermer un handle en cas d'erreur (d'où "des fuites de mémoires"). Plus grave encore : le code source comportant l'ensemble de tests de conditions deviendra bien moins lisible. En outre, si une erreur se produit il est nécessaire bien souvent que l'utilisateur intervienne (production d'un message l'avertissant) puis de revenir sur le point d'entrée qui a provoqué l'erreur.