Merci pour vos retours !
Aussi, je suis gêné par la première phrase, qui occulte que des levées d’exceptions peuvent être des situations tout à fait normales, et n’empêchent en rien le programme de continuer son exécution, l’exemple le plus flagrant étant StopIteration
.
En effet, mais du coup je ne vois pas trop comment formuler ça. C’est la première fois que je rédige un contenu sur le Python, peut-être ai-je un peu dépassé ma "limite pédagogique".
Il y a quelques confusions dans le vocabulaire, comme quand tu parles de TypeError
levée par une fonction et que l’exemple présente une addition
N’est-ce pas la fonction (enfin la méthode) __add__
du type int
qui lève cette exception (bien que ça puisse être confus, je vais modifier ça) ?
C’est bien, mais lever une exception se fait très rarement dans ce cas d’usage, donc ça fait un peu bizarre.
En effet, je voulais simplement qu’il n’y a pas besoin d’importer quelque chose pour lever une exception (elles sont dans les builtins). Et vu que le terminal permet d’essayer des petits bouts de code facilement, je me suis dit que ça en faisait un bon outil pour débuter.
Les exemples donnés gagneraient sûrement à refléter des problèmes de la vie réelle, plutôt que des cas d’école qui ne correspondent pas à grand chose.
Je vais être limité par mon expérience. À part dans des "gros" morceaux de code, je ne les utilise qu’occasionnellement.
Tu conseilles de ne pas abuser d’exceptions personnalisée par rapport à la réutilisation du code, mais justement, dans la réalisation d’une bibliothèque par exemple il est souvent bien plus facile d’avoir des exceptions qui héritent toutes d’une base commune pour pouvoir les filtrer plus ou moins finement, comme expliqué ici.
En effet, mais là je pensais plutôt aux exceptions comme TypeError
. Si on créé un module qui fourni une fonction qui prend un int
en paramètre et qu’on lui passe une str
, il vaut mieux (à mon humble avis) lever une TypeError
qu’une exception perso. En revanche, si le traitement du nombre passé en paramètre produit une erreur, alors en effet, une exception qui hérite d’une autre dédiée au module est plus adaptée.
Je ne comprends pas ce que tu veux dire par « il faut penser à ajouter un paramètre dédié et à appeler la méthode init de Exception avec ce paramètre » ni à quel moment dans le code tu fais appel à la méthode de la classe parente.
En effet, petit oubli de ma part. Je corrige.
Bien vu nohar, je vais les rajouter.
J’ai été très pris ces derniers temps et je n’ai donc pas programmé depuis longtemps. Me lancer dans un mini-tuto sur le sujet était peut-être un peu présomptueux de ma part. Du coup, n’hésitez surtout pas à reprendre ce tuto si vous voulez faire quelque chose de votre côté !