[Python-checkins] cpython: Close issue23467: add %r compatibility to bytes and bytearray

ethan.furman python-checkins at python.org
Wed Mar 11 16:17:28 CET 2015


https://hg.python.org/cpython/rev/611fa301b807
changeset:   94943:611fa301b807
user:        Ethan Furman <ethan at stoneleaf.us>
date:        Wed Mar 11 08:17:00 2015 -0700
summary:
  Close issue23467: add %r compatibility to bytes and bytearray

files:
  Doc/library/stdtypes.rst |  8 +++++++-
  Lib/test/test_format.py  |  5 +++++
  Objects/bytesobject.c    |  2 ++
  3 files changed, 14 insertions(+), 1 deletions(-)


diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -3165,7 +3165,7 @@
 +------------+-----------------------------------------------------+-------+
 | ``'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 @@
 | ``'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 @@
    ``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
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -310,6 +310,11 @@
         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
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -720,6 +720,8 @@
                 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)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list