Issue #1680159: unicode coercion during an 'in' operation was masking

any errors that might occur during coercion of the left operand and
turning them into a TypeError with a message text that was confusing in
the given context.  This patch lets any errors through, as was already
done during coercion of the right hand side.
This commit is contained in:
R. David Murray 2009-12-14 16:28:26 +00:00
parent 96228739c5
commit 0a0a1a842c
3 changed files with 6 additions and 3 deletions

View File

@ -344,7 +344,8 @@ class UnicodeTest(
# If the following fails either
# the contains operator does not propagate UnicodeErrors or
# someone has changed the default encoding
self.assertRaises(UnicodeError, 'g\xe2teau'.__contains__, u'\xe2')
self.assertRaises(UnicodeDecodeError, 'g\xe2teau'.__contains__, u'\xe2')
self.assertRaises(UnicodeDecodeError, u'g\xe2teau'.__contains__, '\xe2')
self.assertTrue(u'' in '')
self.assertTrue('' in u'')
@ -375,6 +376,7 @@ class UnicodeTest(
self.assertTrue(u'asdf' not in u'')
self.assertRaises(TypeError, u"abc".__contains__)
self.assertRaises(TypeError, u"abc".__contains__, object())
def test_formatting(self):
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)

View File

@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 2?
Core and Builtins
-----------------
- Issue #1680159: unicode coercion during an 'in' operation no longer masks
the underlying error when the coercion fails for the left hand operand.
- Issue #7491: Metaclass's __cmp__ method was ignored.
- Issue #7466: segmentation fault when the garbage collector is called

View File

@ -6502,8 +6502,6 @@ int PyUnicode_Contains(PyObject *container,
/* Coerce the two arguments */
sub = PyUnicode_FromObject(element);
if (!sub) {
PyErr_SetString(PyExc_TypeError,
"'in <string>' requires string as left operand");
return -1;
}