Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (révision 70631) +++ Objects/unicodeobject.c (copie de travail) @@ -8699,7 +8699,7 @@ case 's': case 'r': - if (PyUnicode_Check(v) && c == 's') { + if (PyUnicode_CheckExact(v) && c == 's') { temp = v; Py_INCREF(temp); } Index: Lib/test/test_unicode.py =================================================================== --- Lib/test/test_unicode.py (révision 70631) +++ Lib/test/test_unicode.py (copie de travail) @@ -1155,6 +1155,17 @@ self.assertRaises(MemoryError, alloc) self.assertRaises(MemoryError, alloc) + def test_format_subclass(self): + class U(unicode): + def __str__(self): + return '__str__ overridden' + def __unicode__(self): + return u'__unicode__ overridden' + u = U(u'xxx') + self.assertEquals("%s" % u, u'__unicode__ overridden') + self.assertEquals("{}".format(u), u'__unicode__ overridden') + + def test_main(): test_support.run_unittest(__name__)