mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Issue #16491: IDLE now prints chained exception tracebacks.
This commit is contained in:
commit
7131749959
2 changed files with 30 additions and 9 deletions
|
@ -171,15 +171,34 @@ 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
|
||||||
tbe = traceback.extract_tb(tb)
|
seen = set()
|
||||||
print('Traceback (most recent call last):', file=efile)
|
|
||||||
exclude = ("run.py", "rpc.py", "threading.py", "queue.py",
|
def print_exc(typ, exc, tb):
|
||||||
"RemoteDebugger.py", "bdb.py")
|
seen.add(exc)
|
||||||
cleanup_traceback(tbe, exclude)
|
context = exc.__context__
|
||||||
traceback.print_list(tbe, file=efile)
|
cause = exc.__cause__
|
||||||
lines = traceback.format_exception_only(typ, val)
|
if cause is not None and cause not in seen:
|
||||||
for line in lines:
|
print_exc(type(cause), cause, cause.__traceback__)
|
||||||
print(line, end='', file=efile)
|
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)
|
||||||
|
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):
|
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"
|
||||||
|
|
|
@ -139,6 +139,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16491: IDLE now prints chained exception tracebacks.
|
||||||
|
|
||||||
- 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
|
||||||
file descriptor receive the incorrect type.
|
file descriptor receive the incorrect type.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue