[Python-checkins] cpython (3.5): Issue #24695: Fix a regression in traceback.print_exception()
berker.peksag
python-checkins at python.org
Fri Jul 24 16:36:53 CEST 2015
https://hg.python.org/cpython/rev/b45077269aaa
changeset: 97042:b45077269aaa
branch: 3.5
parent: 97039:d8229c26dd92
user: Berker Peksag <berker.peksag at gmail.com>
date: Fri Jul 24 17:36:21 2015 +0300
summary:
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.
files:
Lib/test/test_traceback.py | 13 +++++++++++++
Lib/traceback.py | 4 +++-
Misc/NEWS | 4 ++++
3 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -209,6 +209,13 @@
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 @@
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):
diff --git a/Lib/traceback.py b/Lib/traceback.py
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -453,6 +453,7 @@
_seen=_seen)
else:
context = None
+ self.exc_traceback = exc_traceback
self.__cause__ = cause
self.__context__ = context
self.__suppress_context__ = \
@@ -561,6 +562,7 @@
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()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,10 @@
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
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list