[Python-checkins] r58901 - in python/branches/release25-maint: Lib/contextlib.py Lib/test/test_with.py Misc/NEWS
nick.coghlan
python-checkins at python.org
Wed Nov 7 13:26:41 CET 2007
Author: nick.coghlan
Date: Wed Nov 7 13:26:40 2007
New Revision: 58901
Modified:
python/branches/release25-maint/Lib/contextlib.py
python/branches/release25-maint/Lib/test/test_with.py
python/branches/release25-maint/Misc/NEWS
Log:
Fix issue #1705170 (backport from trunk)
Modified: python/branches/release25-maint/Lib/contextlib.py
==============================================================================
--- python/branches/release25-maint/Lib/contextlib.py (original)
+++ python/branches/release25-maint/Lib/contextlib.py Wed Nov 7 13:26:40 2007
@@ -25,6 +25,10 @@
else:
raise RuntimeError("generator didn't stop")
else:
+ if value is None:
+ # Need to force instantiation so we can reliably
+ # tell if we get the same exception back
+ value = type()
try:
self.gen.throw(type, value, traceback)
raise RuntimeError("generator didn't stop after throw()")
Modified: python/branches/release25-maint/Lib/test/test_with.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_with.py (original)
+++ python/branches/release25-maint/Lib/test/test_with.py Wed Nov 7 13:26:40 2007
@@ -440,6 +440,7 @@
self.assertAfterWithGeneratorInvariantsNoError(self.bar)
def testRaisedStopIteration1(self):
+ # From bug 1462485
@contextmanager
def cm():
yield
@@ -451,6 +452,7 @@
self.assertRaises(StopIteration, shouldThrow)
def testRaisedStopIteration2(self):
+ # From bug 1462485
class cm(object):
def __enter__(self):
pass
@@ -463,7 +465,21 @@
self.assertRaises(StopIteration, shouldThrow)
+ def testRaisedStopIteration3(self):
+ # Another variant where the exception hasn't been instantiated
+ # From bug 1705170
+ @contextmanager
+ def cm():
+ yield
+
+ def shouldThrow():
+ with cm():
+ raise iter([]).next()
+
+ self.assertRaises(StopIteration, shouldThrow)
+
def testRaisedGeneratorExit1(self):
+ # From bug 1462485
@contextmanager
def cm():
yield
@@ -475,6 +491,7 @@
self.assertRaises(GeneratorExit, shouldThrow)
def testRaisedGeneratorExit2(self):
+ # From bug 1462485
class cm (object):
def __enter__(self):
pass
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS (original)
+++ python/branches/release25-maint/Misc/NEWS Wed Nov 7 13:26:40 2007
@@ -32,6 +32,9 @@
Library
-------
+- Issue #1705170: contextlib.contextmanager was still swallowing
+ StopIteration in some cases. This should no longer happen.
+
- Bug #1307: Fix smtpd so it doesn't raise an exception when there is no arg.
- ctypes will now work correctly on 32-bit systems when Python is
More information about the Python-checkins
mailing list