[Python-checkins] cpython (merge 3.2 -> default): Merge #13579: teach string.Formatter about 'a'.

r.david.murray python-checkins at python.org
Sun Aug 19 23:59:41 CEST 2012


http://hg.python.org/cpython/rev/4feb10457c13
changeset: 78659:4feb10457c13
parent: 78657:2703171ddf53
parent: 78658:24b449a77e88
user: R David Murray <rdmurray at bitdance.com>
date: Sun Aug 19 17:45:40 2012 -0400
summary:
 Merge #13579: teach string.Formatter about 'a'.
Patch by Francisco Martín Brugué.
files:
 Doc/library/string.rst | 11 ++++++-----
 Lib/string.py | 10 ++++++----
 Lib/test/test_string.py | 6 ++++++
 Misc/NEWS | 2 ++
 4 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -91,8 +91,8 @@
 
 .. method:: format(format_string, *args, **kwargs)
 
- :meth:`format` is the primary API method. It takes a format template
- string, and an arbitrary set of positional and keyword argument.
+ :meth:`format` is the primary API method. It takes a format string and
+ an arbitrary set of positional and keyword arguments.
 :meth:`format` is just a wrapper that calls :meth:`vformat`.
 
 .. method:: vformat(format_string, args, kwargs)
@@ -101,8 +101,8 @@
 separate function for cases where you want to pass in a predefined
 dictionary of arguments, rather than unpacking and repacking the
 dictionary as individual arguments using the ``*args`` and ``**kwds``
- syntax. :meth:`vformat` does the work of breaking up the format template
- string into character data and replacement fields. It calls the various
+ syntax. :meth:`vformat` does the work of breaking up the format string
+ into character data and replacement fields. It calls the various
 methods described below.
 
 In addition, the :class:`Formatter` defines a number of methods that are
@@ -173,7 +173,8 @@
 
 Converts the value (returned by :meth:`get_field`) given a conversion type
 (as in the tuple returned by the :meth:`parse` method). The default
- version understands 'r' (repr) and 's' (str) conversion types.
+ version understands 's' (str), 'r' (repr) and 'a' (ascii) conversion
+ types.
 
 
 .. _formatstrings:
diff --git a/Lib/string.py b/Lib/string.py
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -220,12 +220,14 @@
 
 def convert_field(self, value, conversion):
 # do any conversion on the resulting object
- if conversion == 'r':
- return repr(value)
+ if conversion is None:
+ return value
 elif conversion == 's':
 return str(value)
- elif conversion is None:
- return value
+ elif conversion == 'r':
+ return repr(value)
+ elif conversion == 'a':
+ return ascii(value)
 raise ValueError("Unknown conversion specifier {0!s}".format(conversion))
 
 
diff --git a/Lib/test/test_string.py b/Lib/test/test_string.py
--- a/Lib/test/test_string.py
+++ b/Lib/test/test_string.py
@@ -37,6 +37,12 @@
 self.assertEqual(fmt.format("-{arg!r}-", arg='test'), "-'test'-")
 self.assertEqual(fmt.format("{0!s}", 'test'), 'test')
 self.assertRaises(ValueError, fmt.format, "{0!h}", 'test')
+ # issue13579
+ self.assertEqual(fmt.format("{0!a}", 42), '42')
+ self.assertEqual(fmt.format("{0!a}", string.ascii_letters),
+ "'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'")
+ self.assertEqual(fmt.format("{0!a}", chr(255)), "'\\xff'")
+ self.assertEqual(fmt.format("{0!a}", chr(256)), "'\\u0100'")
 
 def test_name_lookup(self):
 fmt = string.Formatter()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -16,6 +16,8 @@
 Library
 -------
 
+- Issue #13579: string.Formatter now understands the 'a' conversion specifier.
+
 - Issue #15595: Fix subprocess.Popen(universal_newlines=True)
 for certain locales (utf-16 and utf-32 family). Patch by Chris Jerdonek.
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /