summaryrefslogtreecommitdiff
path: root/Lib/idlelib/stackviewer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/stackviewer.py')
-rw-r--r--Lib/idlelib/stackviewer.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/Lib/idlelib/stackviewer.py b/Lib/idlelib/stackviewer.py
index 94ffb4eff4..702fd32ca5 100644
--- a/Lib/idlelib/stackviewer.py
+++ b/Lib/idlelib/stackviewer.py
@@ -27,7 +27,10 @@ class StackTreeItem(TreeItem):
def get_stack(self, tb):
if tb is None:
- tb = sys.last_traceback
+ if hasattr(sys, 'last_exc'):
+ tb = sys.last_exc.__traceback__
+ else:
+ tb = sys.last_traceback
stack = []
if tb and tb.tb_frame is None:
tb = tb.tb_next
@@ -37,11 +40,15 @@ class StackTreeItem(TreeItem):
return stack
def get_exception(self):
- type = sys.last_type
- value = sys.last_value
- if hasattr(type, "__name__"):
- type = type.__name__
- s = str(type)
+ if hasattr(sys, 'last_exc'):
+ typ = type(sys.last_exc)
+ value = sys.last_exc
+ else:
+ typ = sys.last_type
+ value = sys.last_value
+ if hasattr(typ, "__name__"):
+ typ = typ.__name__
+ s = str(typ)
if value is not None:
s = s + ": " + str(value)
return s
@@ -136,6 +143,7 @@ def _stack_viewer(parent): # htest #
except NameError:
exc_type, exc_value, exc_tb = sys.exc_info()
# inject stack trace to sys
+ sys.last_exc = exc_value
sys.last_type = exc_type
sys.last_value = exc_value
sys.last_traceback = exc_tb
@@ -143,6 +151,7 @@ def _stack_viewer(parent): # htest #
StackBrowser(top, flist=flist, top=top, tb=exc_tb)
# restore sys to original state
+ del sys.last_exc
del sys.last_type
del sys.last_value
del sys.last_traceback