[Python-checkins] r76574 - in python/branches/release31-maint: Lib/test/test_traceback.py Lib/traceback.py Misc/NEWS Python/pythonrun.c
antoine.pitrou
python-checkins at python.org
Sat Nov 28 17:16:09 CET 2009
Author: antoine.pitrou
Date: Sat Nov 28 17:16:09 2009
New Revision: 76574
Log:
Merged revisions 76573 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r76573 | antoine.pitrou | 2009-11-28 17:12:28 +0100 (sam., 28 nov. 2009) | 3 lines
Issue #4486: When an exception has an explicit cause, do not print its implicit context too.
........
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Lib/test/test_traceback.py
python/branches/release31-maint/Lib/traceback.py
python/branches/release31-maint/Misc/NEWS
python/branches/release31-maint/Python/pythonrun.c
Modified: python/branches/release31-maint/Lib/test/test_traceback.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_traceback.py (original)
+++ python/branches/release31-maint/Lib/test/test_traceback.py Sat Nov 28 17:16:09 2009
@@ -253,6 +253,26 @@
self.check_zero_div(blocks[0])
self.assertTrue('inner_raise() # Marker' in blocks[2])
+ def test_cause_and_context(self):
+ # When both a cause and a context are set, only the cause should be
+ # displayed and the context should be muted.
+ def inner_raise():
+ try:
+ self.zero_div()
+ except ZeroDivisionError as _e:
+ e = _e
+ try:
+ xyzzy
+ except NameError:
+ raise KeyError from e
+ def outer_raise():
+ inner_raise() # Marker
+ blocks = boundaries.split(self.get_report(outer_raise))
+ self.assertEquals(len(blocks), 3)
+ self.assertEquals(blocks[1], cause_message)
+ self.check_zero_div(blocks[0])
+ self.assert_('inner_raise() # Marker' in blocks[2])
+
def test_cause_recursive(self):
def inner_raise():
try:
Modified: python/branches/release31-maint/Lib/traceback.py
==============================================================================
--- python/branches/release31-maint/Lib/traceback.py (original)
+++ python/branches/release31-maint/Lib/traceback.py Sat Nov 28 17:16:09 2009
@@ -120,13 +120,14 @@
seen.add(exc)
its = []
cause = exc.__cause__
- context = exc.__context__
if cause is not None and cause not in seen:
its.append(_iter_chain(cause, None, seen))
its.append([(_cause_message, None)])
- if context is not None and context is not cause and context not in seen:
- its.append(_iter_chain(context, None, seen))
- its.append([(_context_message, None)])
+ else:
+ context = exc.__context__
+ if context is not None and context not in seen:
+ its.append(_iter_chain(context, None, seen))
+ its.append([(_context_message, None)])
its.append([(exc, custom_tb or exc.__traceback__)])
# itertools.chain is in an extension module and may be unavailable
for it in its:
Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS (original)
+++ python/branches/release31-maint/Misc/NEWS Sat Nov 28 17:16:09 2009
@@ -49,6 +49,10 @@
Library
-------
+- Issue #4486: When an exception has an explicit cause, do not print its
+ implicit context too. This affects the `traceback` module as well as
+ built-in exception printing.
+
- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters
- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can
Modified: python/branches/release31-maint/Python/pythonrun.c
==============================================================================
--- python/branches/release31-maint/Python/pythonrun.c (original)
+++ python/branches/release31-maint/Python/pythonrun.c Sat Nov 28 17:16:09 2009
@@ -1576,7 +1576,7 @@
cause_message, f);
}
}
- if (context) {
+ else if (context) {
res = PySet_Contains(seen, context);
if (res == -1)
PyErr_Clear();
More information about the Python-checkins
mailing list