Créons un stacktrace décemment compliqué, afin de démontrer que nous obtenons le stacktrace complet:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
Journalisation de la trace de pile complète
Une meilleure pratique consiste à configurer un enregistreur pour votre module. Il connaîtra le nom du module et pourra changer de niveau (entre autres attributs, comme les gestionnaires)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
Et nous pouvons utiliser cet enregistreur pour obtenir l'erreur:
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
Quels journaux:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Et donc nous obtenons la même sortie que lorsque nous avons une erreur:
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Obtenir juste la chaîne
Si vous voulez vraiment juste la chaîne, utilisez traceback.format_exc
plutôt la fonction, démontrant la journalisation de la chaîne ici:
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
Quels journaux:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
log_error(err)
fonction.