Этот код может вас заинтересовать.
Проходит трассировку и удаляет первый файл, который не должен отображаться. Затем он имитирует поведение Python:
Traceback (most recent call last):
будет отображаться только в том случае, если трассировка содержит более одного файла.
Это выглядит так, как будто моего дополнительного кадра не было.
Вот мой код, предполагая, что есть строка text
:
try:
exec(text)
except:
# we want to format the exception as if no frame was on top.
exp, val, tb = sys.exc_info()
listing = traceback.format_exception(exp, val, tb)
# remove the entry for the first frame
del listing[1]
files = [line for line in listing if line.startswith(" File")]
if len(files) == 1:
# only one file, remove the header.
del listing[0]
print("".join(listing), file=sys.stderr)
sys.exit(1)