• # logging + exceptions

    Posté par (Mastodon) . En réponse au message Comment gérer correctement les exceptions. Évalué à 2. Dernière modification le 03 mai 2016 à 20:23.

    Bonjour,

    Le module "logging" est très bien pour afficher les infos en cours fonctionnement, et pour afficher des messages d'erreur. En plus, tu peux fournir un fichier de configuration au logging, pour laisser l'utilisateur final affiner ses traces.
    logging peut écrire dans un fichier, dans stderr, envoyer les traces en réseau, envoyer des mail... ou tous à la fois si tu veux ! N'utilise pas les appels "looging.debug" directement mais utilise plutôt les loggers nommés:

     logger = logging.getLogger('mon_module') # "mon_module" est défini dans le fichier de conf du logging
     DEBUG and logger.debug("Class::method() val = %s", val) # ce message n'est affiché qu'en mode DEBUG

    (C'est la notation que j'utilise)

    Le système try/except global est pas mal non plus, il permet de formater les exceptions qui arrivent impromptues.

    N'hésite pas non plus à définir tes propres exceptions si tu as des trucs compliqués à tester, ça prend 2 lignes en python (on est pas chez java)

    Ne met pas des try/except partout, laisse passer les "plus grosses" (fichier, io...), au pire re-raise les :

     try:
     du_code_qui_casse()
     except IOError as e:
     logger.critical('Class::method() Ouch : %s, e)
     raise e # re-raise l'exception après traçage. Si tu mets un try/except global, elle est tracée 2 fois

    Le mise au point de fichiers de logs est quelque-chose de compliqué, entre "trop de messages" et "pas assez de messages"... Ce qui est important pour les dév ne l'est pas forcément pour l'utilisateur, et réciproquement !
    Voila, bon courage !