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 Stacktrace
Am besten ist es, einen Logger für Ihr Modul einzurichten. Er kennt den Namen des Moduls und ist in der Lage, die Ebenen zu ändern (neben anderen Attributen, wie z. B. 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!
Wir erhalten also 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 Zeichenkette erhalten
Wenn Sie wirklich nur die Zeichenkette wollen, verwenden Sie die traceback.format_exc
Funktion zu verwenden, um die Protokollierung der Zeichenkette 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!
1 Stimmen
Was ist falsch an:
sys.exc_info()
?0 Stimmen
Fyi, schließlich Blöcke werden immer entschuldigt, egal was afaik.