From 0a0a1a842c02c87fcb052dec226f591cfe6f988f Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Mon, 14 Dec 2009 16:28:26 +0000 Subject: 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. --- Lib/test/test_unicode.py | 4 +++- Misc/NEWS | 3 +++ Objects/unicodeobject.c | 2 -- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 2b269cc..31bceb3 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -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) diff --git a/Misc/NEWS b/Misc/NEWS index cfdf975..08369a2 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index e85b20f..79e824e 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6502,8 +6502,6 @@ int PyUnicode_Contains(PyObject *container, /* Coerce the two arguments */ sub = PyUnicode_FromObject(element); if (!sub) { - PyErr_SetString(PyExc_TypeError, - "'in ' requires string as left operand"); return -1; } -- cgit v0.12