traceback — Печать и извлечение стека вызовов

Модуль traceback предоставляет доступ к интерфейсу извлечения, форматирования и печати "стека вызовов" (traceback) вашей программы. Он имитирует классическое поведение красного текста ошибки интерпретатора Python.

Это абсолютно необходимо для продакшен-кода: если вы просто отлавливаете ошибки через try...except, вы теряете информацию о том, НА КАКОЙ СТРОКЕ и В КАКОЙ ФУНКЦИИ она произошла. traceback это решает.

import traceback

Печать ошибки без падения (Краша)

Обычно, если отловить ошибку, программа не падает, но мы не знаем, откуда она пришла:

import traceback

def calculate():
    return 100 / 0

try:
    calculate()
except Exception as e:
    print("Упс, произошла ошибка! Но сервер не упал.")
    # Функция e печатает просто: "division by zero" - неинформативно.
    
    # Печатает полный классический красный лог в консоль:
    # File "myscript.py", line 4, in calculate
    traceback.print_exc()

print("Программа продолжает работать как ни в чем не бывало!")

Сохранение ошибки (Traceback) в строку

Если вы хотите не просто вывести текст в консоль, а сохранить ошибку в базу данных, отправить её разработчику в Telegram или записать в чистый лог-файл, нужно извлечь её как текст.

import traceback

try:
    calculate()
except Exception as e:
    # Извлечь полную простыню текста ошибки в классную строку
    error_string = traceback.format_exc()
    
    with open('critical_errors.log', 'a', encoding='utf-8') as f:
        f.write("ПРОИЗОШЛА КРИТИЧЕСКАЯ ОШИБКА:\n")
        f.write(error_string)

Полный справочник API (API Reference)

Главные функции

Функция Описание
traceback.print_exc(limit=None, file=None) Автоматически захватывает текущее активное исключение (доступно только внутри блока except) и печатает его структуру (Traceback) в консоль ошибок (или в переданный файл file). limit позволяет обрезать стек глубже N шагов.
traceback.format_exc(limit=None) Работает точно как print_exc(), но никуда ничего не печатает, а ПРОСТО возвращает всю многострочную структуру об ошибке в виде типа str (строки). Идеально для логирования.
traceback.print_stack(f=None, limit=None) Выводит стек ВЫЗОВОВ ТЕКУЩЕГО КОДА, даже если ошибки не было! Крайне полезно для дебага сложных вызовов, когда вы хотите понять "как вообще код дошел до вызова этой функции?".
traceback.format_stack() Возвращает информацию из print_stack() в виде списка строк для дальнейшего анализа.
traceback.extract_tb(tb, limit=None) Извлекает из объекта traceback подробные метрики (номер строки, имя файла, имя модуля, локальные переменные) для глубокого ООП-анализа ошибки.