Python 3.4+tracebackфункция
traceback.clear_frames()
кадры и стек
Очищает локальные переменные во всех кадрах трассировки, чтобы сохранённое исключение не удерживало в памяти данные упавших функций.
Синтаксис
traceback.clear_frames(tb)
Пойманное исключение через __traceback__ держит кадры, а кадры — все локальные переменные: сохранили e в список ошибок — и огромный массив из упавшей функции не освободится. clear_frames(tb) вызывает frame.clear() у каждого кадра; кадр, который ещё исполняется (например, текущий), пропускается молча. После очистки трассировка печатается как раньше — файлы и номера строк остаются, пропадают только переменные.
Примеры
import traceback
def load():
data = list(range(100_000))
raise ValueError('сбой')
try:
load()
except ValueError as e:
err = e
frame = err.__traceback__.tb_next.tb_frame
print(len(frame.f_locals)) # → 1
traceback.clear_frames(err.__traceback__)
print(len(frame.f_locals)) # → 0
print(len(traceback.extract_tb(err.__traceback__))) # → 2
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности