From 65e62e6fe7f6a78cf92619bad741a349a3141170 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Thu, 5 Mar 2015 15:45:01 +1300 Subject: [PATCH] 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. --- traceback2/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/traceback2/__init__.py b/traceback2/__init__.py index f5dd8cf..d6d93f3 100644 --- a/traceback2/__init__.py +++ b/traceback2/__init__.py @@ -91,10 +91,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): file.write(line) @@ -107,8 +110,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):