diff options
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/_pydecimal.py | 2 | ||||
| -rw-r--r-- | Lib/code.py | 33 | ||||
| -rw-r--r-- | Lib/traceback.py | 10 | 
3 files changed, 17 insertions, 28 deletions
diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index ca6c4bd98d..88222be054 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -4108,7 +4108,7 @@ class Context(object):          >>> 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 index 86e1f03260..53244e32ad 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. diff --git a/Lib/traceback.py b/Lib/traceback.py index 22544acd18..72e1e2a9f9 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -89,10 +89,13 @@ def print_exception(etype, value, tb, limit=None, file=None, chain=True):      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 @@ def format_exception(etype, value, tb, limit=None, chain=True):      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):  | 
