130 votes

Comment enregistrer une exception python ?

Comment puis-je enregistrer une exception dans Python ?

J'ai examiné certaines options et j'ai découvert que je pouvais accéder aux détails de l'exception réelle à l'aide de ce code :

import sys
import traceback

try:
    1/0
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback)

J'aimerais en quelque sorte que la chaîne print_exception() soit lancée à stdout afin que je puisse l'enregistrer.

165voto

rlotun Points 3995

Jetez un œil à logging.exception (Module de journalisation Python)

import logging 
def foo():
    try:
        some_code()
    except:
        logging.exception('')

Cela devrait automatiquement prendre soin d'obtenir le traceback pour l'exception actuelle et de l'enregistrer correctement.

106voto

yurez Points 393

Dans Python 3.5, vous pouvez passer l'instance d'exception dans l'argument exc_info :

import logging
try:
    1/0
except Exception as e:
   logging.error('Error at %s', 'division', exc_info=e)

62voto

NeilenMarais Points 488

Exceptions de journalisation est aussi simple que d'ajouter l'argument exc_info=True keyword à n'importe quel message de journal, voir l'entrée pour Logger.debug dans http://docs.python.org/2/library/logging.html.

Exemple :

try: 
    raise Exception('lala')
except Exception:
    logging.info('blah', exc_info=True)

sortie (en fonction, bien sûr, de la configuration de votre gestionnaire de journaux) :

2012-11-29 10:18:12,778 - root - INFO - <ipython-input-27-5af852892344> : 3 - blah
Traceback (most recent call last):
  File "<ipython-input-27-5af852892344>", line 1, in <module>
    try: raise Exception('lala')
Exception: lala

2voto

erickrf Points 425

Tout d'abord, envisagez d'utiliser un type d'exception approprié sur votre clause d'exception. Ensuite, en nommant l'exception, vous pouvez l'imprimer :

try:
    1/0
except Exception as e:
    print e

En fonction de votre version de Python, vous devez utiliser

except Exception, e

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X