diff -r 06cb0d602468 Lib/test/test_unicode.py --- a/Lib/test/test_unicode.py Sun Jul 03 23:16:49 2011 -0700 +++ b/Lib/test/test_unicode.py Mon Jul 04 11:32:11 2011 +0200 @@ -404,6 +404,7 @@ self.assertEqual(u'%c' % 0x1234, u'\u1234') self.assertRaises(OverflowError, u"%c".__mod__, (sys.maxunicode+1,)) self.assertRaises(ValueError, u"%.1\u1032f".__mod__, (1.0/3)) + self.assertRaises(TypeError, "%i".__mod__, "aa") for num in range(0x00,0x80): char = chr(num) diff -r 06cb0d602468 Objects/unicodeobject.c --- a/Objects/unicodeobject.c Sun Jul 03 23:16:49 2011 -0700 +++ b/Objects/unicodeobject.c Mon Jul 04 11:32:11 2011 +0200 @@ -8505,8 +8505,6 @@ case 'o': case 'x': case 'X': - if (c == 'i') - c = 'd'; isnumok = 0; if (PyNumber_Check(v)) { PyObject *iobj=NULL; @@ -8524,7 +8522,7 @@ isnumok = 1; pbuf = formatbuf; len = formatint(pbuf, sizeof(formatbuf)/sizeof(Py_UNICODE), - flags, prec, c, iobj); + flags, prec, (c == 'i'? 'd': c), iobj); Py_DECREF(iobj); if (len < 0) goto onError; @@ -8532,7 +8530,7 @@ } else if (PyLong_Check(iobj)) { isnumok = 1; - temp = formatlong(iobj, flags, prec, c); + temp = formatlong(iobj, flags, prec, (c == 'i'? 'd': c)); Py_DECREF(iobj); if (!temp) goto onError;