From 62e977f1b6d52a973304db9b0268aece99cb6c42 Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Wed, 11 Mar 2015 08:17:00 -0700 Subject: Close issue23467: add %r compatibility to bytes and bytearray --- Doc/library/stdtypes.rst | 8 +++++++- Lib/test/test_format.py | 5 +++++ Objects/bytesobject.c | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index f79c416..af0a85e 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -3165,7 +3165,7 @@ The conversion types are: +------------+-----------------------------------------------------+-------+ | ``'o'`` | Signed octal value. | \(1) | +------------+-----------------------------------------------------+-------+ -| ``'u'`` | Obsolete type -- it is identical to ``'d'``. | \(7) | +| ``'u'`` | Obsolete type -- it is identical to ``'d'``. | \(8) | +------------+-----------------------------------------------------+-------+ | ``'x'`` | Signed hexadecimal (lowercase). | \(2) | +------------+-----------------------------------------------------+-------+ @@ -3200,6 +3200,9 @@ The conversion types are: | ``'a'`` | Bytes (converts any Python object using | \(5) | | | ``repr(obj).encode('ascii','backslashreplace)``). | | +------------+-----------------------------------------------------+-------+ +| ``'r'`` | ``'r'`` is an alias for ``'a'`` and should only | \(7) | +| | be used for Python2/3 code bases. | | ++------------+-----------------------------------------------------+-------+ | ``'%'`` | No argument is converted, results in a ``'%'`` | | | | character in the result. | | +------------+-----------------------------------------------------+-------+ @@ -3238,6 +3241,9 @@ Notes: ``b'%s'`` is deprecated, but will not be removed during the 3.x series. (7) + ``b'%r'`` is deprecated, but will not be removed during the 3.x series. + +(8) See :pep:`237`. .. note:: diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index 9d1f5d3..e1ea33f 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -310,6 +310,11 @@ class FormatTest(unittest.TestCase): testcommon(b"%a", b"ghi", b"b'ghi'") testcommon(b"%a", "jkl", b"'jkl'") testcommon(b"%a", "\u0544", b"'\\u0544'") + # %r is an alias for %a + testcommon(b"%r", 3.14, b"3.14") + testcommon(b"%r", b"ghi", b"b'ghi'") + testcommon(b"%r", "jkl", b"'jkl'") + testcommon(b"%r", "\u0544", b"'\\u0544'") # Test exception for unknown format characters, etc. if verbose: diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 2ceba48..e0ac1ab 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -720,6 +720,8 @@ _PyBytes_Format(PyObject *format, PyObject *args) pbuf = "%"; len = 1; break; + case 'r': + // %r is only for 2/3 code; 3 only code should use %a case 'a': temp = PyObject_ASCII(v); if (temp == NULL) -- cgit v0.12