Lassen Sie uns einen anständig komplizierten Stacktrace erstellen, um zu demonstrieren, dass wir den vollständigen Stacktrace erhalten:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
Protokollierung des vollständigen Stacktraces
Eine bewährte Methode besteht darin, einen Logger für Ihr Modul einzurichten. Es kennt den Namen des Moduls und kann Ebenen ändern (unter anderem Attribute wie Handler).
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
Und wir können diesen Logger verwenden, um den Fehler zu erhalten:
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
Welche Protokolle:
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!
Und so erhalten wir die gleiche Ausgabe wie bei einem Fehler:
>>> 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!
Nur die Schnur bekommen
Wenn Sie wirklich nur die Zeichenfolge möchten, verwenden Sie traceback.format_exc
stattdessen die Funktion, um die Protokollierung der Zeichenfolge hier zu demonstrieren:
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
Welche Protokolle:
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)
Funktion.