diff options
-rw-r--r-- | Lib/test/test_bool.py | 6 | ||||
-rw-r--r-- | Objects/stringobject.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py index 7a9022e..bbaea85 100644 --- a/Lib/test/test_bool.py +++ b/Lib/test/test_bool.py @@ -163,6 +163,12 @@ class BoolTest(unittest.TestCase): self.assertIs(bool(""), False) self.assertIs(bool(), False) + def test_format(self): + self.assertEqual("%d" % False, "0") + self.assertEqual("%d" % True, "1") + self.assertEqual("%x" % False, "0") + self.assertEqual("%x" % True, "1") + def test_hasattr(self): self.assertIs(hasattr([], "append"), True) self.assertIs(hasattr([], "wobble"), False) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 7a35974..b1d711d 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -4144,11 +4144,14 @@ _PyString_FormatLong(PyObject *val, int flags, int prec, int type, return NULL; } - switch (type) { case 'd': case 'u': - result = Py_Type(val)->tp_str(val); + /* Special-case boolean: we want 0/1 */ + if (PyBool_Check(val)) + result = PyNumber_ToBase(val, 10); + else + result = Py_Type(val)->tp_str(val); break; case 'o': numnondigits = 2; |