Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (revision 71117) +++ Objects/unicodeobject.c (working copy) @@ -6462,8 +6462,6 @@ /* Coerce the two arguments */ sub = PyUnicode_FromObject(element); if (!sub) { - PyErr_SetString(PyExc_TypeError, - "'in ' requires string as left operand"); return -1; } Index: Lib/test/test_unicode.py =================================================================== --- Lib/test/test_unicode.py (revision 71117) +++ Lib/test/test_unicode.py (working copy) @@ -345,6 +345,7 @@ # the contains operator does not propagate UnicodeErrors or # someone has changed the default encoding self.assertRaises(UnicodeError, 'g\xe2teau'.__contains__, u'\xe2') + self.assertRaises(UnicodeError, u'g\xe2teau'.__contains__, '\xe2') self.assert_(u'' in '') self.assert_('' in u'') @@ -375,6 +376,7 @@ self.assert_(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)