summaryrefslogtreecommitdiffstats
path: root/Lib/code.py
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2012-08-20 13:02:28 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2012-08-20 13:02:28 (GMT)
commit8bd24fe9ff1c4d5dd3929465fc208b1375c32981 (patch)
treed9a69112450f0b01c7062a92ea87618e4af386a5 /Lib/code.py
parentc0c03be53e15cd2e724808d83031d939da8fa57b (diff)
downloadcpython-8bd24fe9ff1c4d5dd3929465fc208b1375c32981.zip
cpython-8bd24fe9ff1c4d5dd3929465fc208b1375c32981.tar.gz
cpython-8bd24fe9ff1c4d5dd3929465fc208b1375c32981.tar.bz2
Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Diffstat (limited to 'Lib/code.py')
-rw-r--r--Lib/code.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/Lib/code.py b/Lib/code.py
index 605aede..9020aab 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -105,9 +105,10 @@ class InteractiveInterpreter:
The output is written by self.write(), below.
"""
- type, value, sys.last_traceback = sys.exc_info()
+ type, value, tb = sys.exc_info()
sys.last_type = type
sys.last_value = value
+ sys.last_traceback = tb
if filename and type is SyntaxError:
# Work hard to stuff the correct filename in the exception
try:
@@ -119,8 +120,13 @@ class InteractiveInterpreter:
# Stuff in the right filename
value = SyntaxError(msg, (filename, lineno, offset, line))
sys.last_value = value
- lines = traceback.format_exception_only(type, value)
- self.write(''.join(lines))
+ if sys.excepthook is sys.__excepthook__:
+ lines = traceback.format_exception_only(type, value)
+ self.write(''.join(lines))
+ else:
+ # If someone has set sys.excepthook, we let that take precedence
+ # over self.write
+ sys.excepthook(type, value, tb)
def showtraceback(self):
"""Display the exception that just occurred.
@@ -143,7 +149,12 @@ class InteractiveInterpreter:
lines.extend(traceback.format_exception_only(type, value))
finally:
tblist = tb = None
- self.write(''.join(lines))
+ if sys.excepthook is sys.__excepthook__:
+ self.write(''.join(lines))
+ else:
+ # If someone has set sys.excepthook, we let that take precedence
+ # over self.write
+ sys.excepthook(type, value, tb)
def write(self, data):
"""Write a string.