]> granicus.if.org Git - python/commitdiff
Issue #24695: Fix a regression in traceback.print_exception()
authorBerker Peksag <berker.peksag@gmail.com>
Fri, 24 Jul 2015 14:36:21 +0000 (17:36 +0300)
committerBerker Peksag <berker.peksag@gmail.com>
Fri, 24 Jul 2015 14:36:21 +0000 (17:36 +0300)
If exc_traceback is None we shouldn't print a traceback header
like described in the documentation.

Lib/test/test_traceback.py
Lib/traceback.py
Misc/NEWS

index e8c4d74f7ba54eeff714d9b095d8e3359f266444..641a2df0631192258316a7c43e701c53ae0cb615 100644 (file)
@@ -209,6 +209,13 @@ class SyntaxTracebackCases(unittest.TestCase):
                     b'ZeroDivisionError: division by zero']
         self.assertEqual(stderr.splitlines(), expected)
 
+    def test_print_exception(self):
+        output = StringIO()
+        traceback.print_exception(
+            Exception, Exception("projector"), None, file=output
+        )
+        self.assertEqual(output.getvalue(), "Exception: projector\n")
+
 
 class TracebackFormatTests(unittest.TestCase):
 
@@ -848,6 +855,12 @@ class TestTracebackException(unittest.TestCase):
         exc = traceback.TracebackException(Exception, e, tb)
         self.assertEqual(exc.stack[0].locals, None)
 
+    def test_traceback_header(self):
+        # do not print a traceback header if exc_traceback is None
+        # see issue #24695
+        exc = traceback.TracebackException(Exception, Exception("haven"), None)
+        self.assertEqual(list(exc.format()), ["Exception: haven\n"])
+
 
 class MiscTest(unittest.TestCase):
 
index 61c9fb57acea8324ab995dc4f40999a237b7b930..02edeb6217ee28eb5b5f0fb63f66ab70c9062eac 100644 (file)
@@ -453,6 +453,7 @@ class TracebackException:
                 _seen=_seen)
         else:
             context = None
+        self.exc_traceback = exc_traceback
         self.__cause__ = cause
         self.__context__ = context
         self.__suppress_context__ = \
@@ -561,6 +562,7 @@ class TracebackException:
                 not self.__suppress_context__):
                 yield from self.__context__.format(chain=chain)
                 yield _context_message
-        yield 'Traceback (most recent call last):\n'
+        if self.exc_traceback is not None:
+            yield 'Traceback (most recent call last):\n'
         yield from self.stack.format()
         yield from self.format_exception_only()
index b75beada46045d9e6410644391c213137a241032..b5b3559d70f52d7c3f6acbc9a7ce8edabd57fb0f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #24695: Fix a regression in traceback.print_exception().  If
+  exc_traceback is None we shouldn't print a traceback header like described
+  in the documentation.
+
 - Issue #24620: Random.setstate() now validates the value of state last element.
 
 - Issue #22485: Fixed an issue that caused `inspect.getsource` to return incorrect