Commit df558cb3 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #16491: IDLE now prints chained exception tracebacks.

parents 2f3be0f1 71317499
...@@ -171,16 +171,35 @@ def print_exception(): ...@@ -171,16 +171,35 @@ def print_exception():
efile = sys.stderr efile = sys.stderr
typ, val, tb = excinfo = sys.exc_info() typ, val, tb = excinfo = sys.exc_info()
sys.last_type, sys.last_value, sys.last_traceback = excinfo sys.last_type, sys.last_value, sys.last_traceback = excinfo
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
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) tbe = traceback.extract_tb(tb)
print('Traceback (most recent call last):', file=efile) print('Traceback (most recent call last):', file=efile)
exclude = ("run.py", "rpc.py", "threading.py", "queue.py", exclude = ("run.py", "rpc.py", "threading.py", "queue.py",
"RemoteDebugger.py", "bdb.py") "RemoteDebugger.py", "bdb.py")
cleanup_traceback(tbe, exclude) cleanup_traceback(tbe, exclude)
traceback.print_list(tbe, file=efile) traceback.print_list(tbe, file=efile)
lines = traceback.format_exception_only(typ, val) lines = traceback.format_exception_only(typ, exc)
for line in lines: for line in lines:
print(line, end='', file=efile) print(line, end='', file=efile)
print_exc(typ, val, tb)
def cleanup_traceback(tb, exclude): def cleanup_traceback(tb, exclude):
"Remove excluded traces from beginning/end of tb; get cached lines" "Remove excluded traces from beginning/end of tb; get cached lines"
orig_tb = tb[:] orig_tb = tb[:]
......
...@@ -209,6 +209,8 @@ Core and Builtins ...@@ -209,6 +209,8 @@ Core and Builtins
Library Library
------- -------
- Issue #16491: IDLE now prints chained exception tracebacks.
- fcntl: add F_DUPFD_CLOEXEC constant, available on Linux 2.6.24+. - fcntl: add F_DUPFD_CLOEXEC constant, available on Linux 2.6.24+.
- Issue #15972: Fix error messages when os functions expecting a file name or - Issue #15972: Fix error messages when os functions expecting a file name or
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment