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:
parent
96228739c5
commit
0a0a1a842c
|
@ -344,7 +344,8 @@ class UnicodeTest(
|
||||||
# If the following fails either
|
# If the following fails either
|
||||||
# the contains operator does not propagate UnicodeErrors or
|
# the contains operator does not propagate UnicodeErrors or
|
||||||
# someone has changed the default encoding
|
# 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(u'' in '')
|
||||||
self.assertTrue('' in u'')
|
self.assertTrue('' in u'')
|
||||||
|
@ -375,6 +376,7 @@ class UnicodeTest(
|
||||||
self.assertTrue(u'asdf' not in u'')
|
self.assertTrue(u'asdf' not in u'')
|
||||||
|
|
||||||
self.assertRaises(TypeError, u"abc".__contains__)
|
self.assertRaises(TypeError, u"abc".__contains__)
|
||||||
|
self.assertRaises(TypeError, u"abc".__contains__, object())
|
||||||
|
|
||||||
def test_formatting(self):
|
def test_formatting(self):
|
||||||
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
|
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 2?
|
||||||
Core and Builtins
|
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 #7491: Metaclass's __cmp__ method was ignored.
|
||||||
|
|
||||||
- Issue #7466: segmentation fault when the garbage collector is called
|
- Issue #7466: segmentation fault when the garbage collector is called
|
||||||
|
|
|
@ -6502,8 +6502,6 @@ int PyUnicode_Contains(PyObject *container,
|
||||||
/* Coerce the two arguments */
|
/* Coerce the two arguments */
|
||||||
sub = PyUnicode_FromObject(element);
|
sub = PyUnicode_FromObject(element);
|
||||||
if (!sub) {
|
if (!sub) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
|
||||||
"'in <string>' requires string as left operand");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue