format_exception in capture_or_log_exception: python 3.9 compatible

This commit is contained in:
Klaas van Schelven
2025-04-26 10:47:16 +02:00
parent 4b396446b0
commit c51051dc2e

View File

@@ -119,8 +119,14 @@ def capture_or_log_exception(e, logger):
if sentry_sdk.is_initialized():
sentry_sdk.capture_exception(e)
else:
# this gnarly approach makes it so that each line of the traceback gets the same prefixes (dates etc)
for bunch_of_lines in traceback.format_exception(e):
# this gnarly approach makes it so that the logger prefixes (e.g. snappea task number, dates etc) are shown
# for each of the lines of the traceback (though it has the disadvantage of time not standing still while
# we iterate in the loop).
#
# the 3-argument signature is needed for Python 3.9 (in Python 3.10 and up .format_exception(e) is enough).
# https://docs.python.org/3.10/library/traceback.html#traceback.print_exception
# > If value and tb are provided, the first argument is ignored in order to provide backwards compatibility.
for bunch_of_lines in traceback.format_exception(type(e), e, e.__traceback__):
for line in bunch_of_lines.splitlines():
# Note: when .is_initialized() is True, .error is spammy (it gets captured) but we don't have that
# problem in this branch.