From: Serhiy Storchaka Date: Wed, 9 Jan 2013 10:24:48 +0000 (+0200) Subject: Issue #16491: IDLE now prints chained exception tracebacks. X-Git-Tag: v3.3.1rc1~408 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7131749959e674ae347e34efabdc6291b21cbe43;p=python Issue #16491: IDLE now prints chained exception tracebacks. --- 7131749959e674ae347e34efabdc6291b21cbe43 diff --cc Lib/idlelib/run.py index 9872af4251,b0a4794231..dbf046bc5d --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@@ -171,15 -158,32 +171,34 @@@ def print_exception() efile = sys.stderr typ, val, tb = excinfo = sys.exc_info() sys.last_type, sys.last_value, sys.last_traceback = excinfo - tbe = traceback.extract_tb(tb) - print('Traceback (most recent call last):', file=efile) - exclude = ("run.py", "rpc.py", "threading.py", "queue.py", - "RemoteDebugger.py", "bdb.py") - cleanup_traceback(tbe, exclude) - traceback.print_list(tbe, file=efile) - lines = traceback.format_exception_only(typ, val) - for line in lines: - print(line, end='', file=efile) + seen = set() + + def print_exc(typ, exc, tb): + seen.add(exc) + context = exc.__context__ + cause = exc.__cause__ + if cause is not None and cause not in seen: + print_exc(type(cause), cause, cause.__traceback__) + print("\nThe above exception was the direct cause " + "of the following exception:\n", file=efile) - elif context is not None and context not in seen: ++ elif (context is not None and ++ not exc.__suppress_context__ and ++ context not in seen): + print_exc(type(context), context, context.__traceback__) + print("\nDuring handling of the above exception, " + "another exception occurred:\n", file=efile) + if tb: + tbe = traceback.extract_tb(tb) + print('Traceback (most recent call last):', file=efile) + exclude = ("run.py", "rpc.py", "threading.py", "queue.py", + "RemoteDebugger.py", "bdb.py") + cleanup_traceback(tbe, exclude) + traceback.print_list(tbe, file=efile) + lines = traceback.format_exception_only(typ, exc) + for line in lines: + print(line, end='', file=efile) + + print_exc(typ, val, tb) def cleanup_traceback(tb, exclude): "Remove excluded traces from beginning/end of tb; get cached lines" diff --cc Misc/NEWS index 8a5d14d443,029c93007d..e3fd61c891 --- a/Misc/NEWS +++ b/Misc/NEWS @@@ -139,11 -199,10 +139,13 @@@ Core and Builtin Library ------- + - Issue #16491: IDLE now prints chained exception tracebacks. + -- Issue #16828: Fix error incorrectly raised by bz2.compress(''). Patch by - Martin Packman. +- Issue #15972: Fix error messages when os functions expecting a file name or + file descriptor receive the incorrect type. + +- Issue #16828: Fix error incorrectly raised by bz2.compress(b'') and + bz2.BZ2Compressor.compress(b''). Initial patch by Martin Packman. - Issue #16541: tk_setPalette() now works with keyword arguments.