diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2012-08-20 13:02:28 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2012-08-20 13:02:28 (GMT) |
commit | 8bd24fe9ff1c4d5dd3929465fc208b1375c32981 (patch) | |
tree | d9a69112450f0b01c7062a92ea87618e4af386a5 /Lib/code.py | |
parent | c0c03be53e15cd2e724808d83031d939da8fa57b (diff) | |
download | cpython-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.py | 19 |
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. |