diff options
author | Andrew Kuchling <amk@amk.ca> | 2013-09-15 22:15:56 (GMT) |
---|---|---|
committer | Andrew Kuchling <amk@amk.ca> | 2013-09-15 22:15:56 (GMT) |
commit | 173a157e725579eec1f28f8c9d53d6761ba6c79f (patch) | |
tree | 98be7afea0a4f929f07193d94ffe86cc0e7739e0 /Lib/traceback.py | |
parent | 8408dc581e2baaa306b57f14486cfa013fd68c68 (diff) | |
download | cpython-173a157e725579eec1f28f8c9d53d6761ba6c79f.zip cpython-173a157e725579eec1f28f8c9d53d6761ba6c79f.tar.gz cpython-173a157e725579eec1f28f8c9d53d6761ba6c79f.tar.bz2 |
#1565525: Add traceback.clear_frames() helper function to clear locals ref'd by a traceback
Diffstat (limited to 'Lib/traceback.py')
-rw-r--r-- | Lib/traceback.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Lib/traceback.py b/Lib/traceback.py index 3aa1578..d5b3752 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -7,7 +7,8 @@ import operator __all__ = ['extract_stack', 'extract_tb', 'format_exception', 'format_exception_only', 'format_list', 'format_stack', 'format_tb', 'print_exc', 'format_exc', 'print_exception', - 'print_last', 'print_stack', 'print_tb'] + 'print_last', 'print_stack', 'print_tb', + 'clear_frames'] # # Formatting and printing lists of traceback lines. @@ -299,3 +300,13 @@ def extract_stack(f=None, limit=None): stack = list(_extract_stack_iter(_get_stack(f), limit=limit)) stack.reverse() return stack + +def clear_frames(tb): + "Clear all references to local variables in the frames of a traceback." + while tb is not None: + try: + tb.tb_frame.clear() + except RuntimeError: + # Ignore the exception raised if the frame is still executing. + pass + tb = tb.tb_next |