Mettre en place les bonnes pratiques de gestion des erreurs #34
Labels
No Label
bug
duplicate
enhancement
help wanted
independant
invalid
module/autre
module/backend
module/desktop
module/docs
module/frontend
module/scripts
module/sesam-vitale
module/utils
open-source
question
to-triage
wontfix
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: P4Pillon/Krys4lide#34
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Il semblerait que le paquet https://docs.rs/error-chain/latest/error_chain/ soit un outil très encouragé pour faciliter une gestion propre des erreurs.
Il permet à la fois de créer facilement des erreurs customisée, accessibles de manière élégante, et permet un affichage clair de la chaine d'erreur en cas de panic.
La documentation du paquet explique comment bien mettre en place la gestion des erreurs !
Plus d'info :
Principes
Face à une erreur, 3 possibilités, par ordre de préférence :
Bonnes pratiques
Générales
unwrap
/expect
à moins d'être sûr qu'on est dans une situation où on ne peut pas avoir, respectivement, deErr
/None
;Result::map_err
par exemple), préférer un stockage de données "structurées", plutôt qu'un stockage déstructuré (par exemple compilé dans une chaîne de texte décrivant l'erreur), pour donner + de possibilités à la partie du programme qui gèrera l'erreur de faire du recovery en ayant tout le contexte ;Organisation
kind
Enum style
pour les stratégies à base derecovery
complexesSingle struct style
pour les stratégies à base derecovery
simple (affichage de l'erreur - try again)Error
partout dans le nom des erreurs ; souvent, avoirError
dans le nom de l'Enum est suffisant :MyError::Io
est préférable àMyError::IoError
#[non_exhaustive]
sur les enum, pour faciliter la compatibilité ascendanteFrom
pour une conversion facileSpécificités pour le code
unsafe
unsafe
doit êtreexception-safety
Bibliothèques :
Typage des erreurs
Error
avec des helpersAnyhow
visiblement un peu avancéderive
pour implémenter automatiquement le traitError
avec des helpersthiserror
Reporting
Logging
log
, probablement le plus utilisé dans les petits projets et prototypeslog
florian_briand referenced this issue2024-08-15 19:44:32 +02:00