diff options
author | Robert Collins <rbtcollins@hp.com> | 2015-03-05 02:45:01 (GMT) |
---|---|---|
committer | Robert Collins <rbtcollins@hp.com> | 2015-03-05 02:45:01 (GMT) |
commit | 2f0441f03f71c658148bff60be46585f56670d1f (patch) | |
tree | d02581d83fa5628fd8e2ec474d1b58747438f365 /Lib/code.py | |
parent | 3737e600f444b230ef2284fa326443990903b25e (diff) | |
download | cpython-2f0441f03f71c658148bff60be46585f56670d1f.zip cpython-2f0441f03f71c658148bff60be46585f56670d1f.tar.gz cpython-2f0441f03f71c658148bff60be46585f56670d1f.tar.bz2 |
Remaining fallout from 17911
The code module was using a private function from traceback in order to skip a
frame - used the direct interface to do that instead,
The decimal module suffered minor fallout from formatting changes ('None' as a
value is now not printed by traceback, the same as None was not before).
The cgitb module was passing a bogus exception type (type.__name__) into
format_exception, which uncovered that format_exception and print_exception had
been ignoring the etype for some time, so the compatibility thunk to the new
code now does the same thing.
Diffstat (limited to 'Lib/code.py')
-rw-r--r-- | Lib/code.py | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/Lib/code.py b/Lib/code.py index 86e1f03..53244e3 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -140,32 +140,15 @@ class InteractiveInterpreter: sys.last_type, sys.last_value, last_tb = ei = sys.exc_info() sys.last_traceback = last_tb try: - lines = [] - for value, tb in traceback._iter_chain(*ei[1:]): - if isinstance(value, str): - lines.append(value) - lines.append('\n') - continue - if tb: - tblist = traceback.extract_tb(tb) - if tb is last_tb: - # The last traceback includes the frame we - # exec'd in - del tblist[:1] - tblines = traceback.format_list(tblist) - if tblines: - lines.append("Traceback (most recent call last):\n") - lines.extend(tblines) - lines.extend(traceback.format_exception_only(type(value), - value)) + lines = traceback.format_exception(ei[0], ei[1], last_tb.tb_next) + 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(ei[0], ei[1], last_tb) finally: - tblist = last_tb = ei = None - 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, last_tb) + last_tb = ei = None def write(self, data): """Write a string. |