[Python-checkins] cpython: Remaining fallout from 17911

robert.collins python-checkins at python.org
Thu Mar 5 03:45:21 CET 2015


https://hg.python.org/cpython/rev/5f3dd0a2b1ab
changeset: 94854:5f3dd0a2b1ab
user: Robert Collins <rbtcollins at hp.com>
date: Thu Mar 05 15:45:01 2015 +1300
summary:
 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.
files:
 Lib/_pydecimal.py | 2 +-
 Lib/code.py | 33 ++++++++-------------------------
 Lib/traceback.py | 10 ++++++++--
 3 files changed, 17 insertions(+), 28 deletions(-)
diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py
--- a/Lib/_pydecimal.py
+++ b/Lib/_pydecimal.py
@@ -4108,7 +4108,7 @@
 >>> context.create_decimal_from_float(3.1415926535897932)
 Traceback (most recent call last):
 ...
- decimal.Inexact: None
+ decimal.Inexact
 
 """
 d = Decimal.from_float(f) # An exact conversion
diff --git a/Lib/code.py b/Lib/code.py
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -140,32 +140,15 @@
 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.
diff --git a/Lib/traceback.py b/Lib/traceback.py
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -89,10 +89,13 @@
 occurred with a caret on the next line indicating the approximate
 position of the error.
 """
+ # format_exception has ignored etype for some time, and code such as cgitb
+ # passes in bogus values as a result. For compatibility with such code we
+ # ignore it here (rather than in the new TracebackException API).
 if file is None:
 file = sys.stderr
 for line in TracebackException(
- etype, value, tb, limit=limit).format(chain=chain):
+ type(value), value, tb, limit=limit).format(chain=chain):
 print(line, file=file, end="")
 
 
@@ -105,8 +108,11 @@
 these lines are concatenated and printed, exactly the same text is
 printed as does print_exception().
 """
+ # format_exception has ignored etype for some time, and code such as cgitb
+ # passes in bogus values as a result. For compatibility with such code we
+ # ignore it here (rather than in the new TracebackException API).
 return list(TracebackException(
- etype, value, tb, limit=limit).format(chain=chain))
+ type(value), value, tb, limit=limit).format(chain=chain))
 
 
 def format_exception_only(etype, value):
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /