[Python-checkins] cpython: Issue #29193: A format string argument for string.Formatter.format()

serhiy.storchaka python-checkins at python.org
Fri Jan 13 02:11:05 EST 2017


https://hg.python.org/cpython/rev/d571d8cd4258
changeset:   106125:d571d8cd4258
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Fri Jan 13 09:10:51 2017 +0200
summary:
  Issue #29193: A format string argument for string.Formatter.format()
is now positional-only.

files:
  Doc/library/string.rst  |   6 +++---
  Doc/whatsnew/3.7.rst    |   6 ++++++
  Lib/string.py           |  10 ++--------
  Lib/test/test_string.py |   5 ++---
  Misc/NEWS               |   3 +++
  5 files changed, 16 insertions(+), 14 deletions(-)


diff --git a/Doc/library/string.rst b/Doc/library/string.rst
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -95,9 +95,9 @@
       an arbitrary set of positional and keyword arguments.
       It is just a wrapper that calls :meth:`vformat`.
 
-      .. deprecated:: 3.5
-         Passing a format string as keyword argument *format_string* has been
-         deprecated.
+      .. versionchanged:: 3.7
+         A format string argument is now :ref:`positional-only
+         <positional-only_parameter>`.
 
    .. method:: vformat(format_string, args, kwargs)
 
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -147,3 +147,9 @@
 that may require changes to your code.
 
 
+Changes in the Python API
+-------------------------
+
+* A format string argument for :meth:`string.Formatter.format`
+  is now :ref:`positional-only <positional-only_parameter>`.
+  (Contributed by Serhiy Storchaka in :issue:`29193`.)
diff --git a/Lib/string.py b/Lib/string.py
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -175,14 +175,8 @@
         try:
             format_string, *args = args # allow the "format_string" keyword be passed
         except ValueError:
-            if 'format_string' in kwargs:
-                format_string = kwargs.pop('format_string')
-                import warnings
-                warnings.warn("Passing 'format_string' as keyword argument is "
-                              "deprecated", DeprecationWarning, stacklevel=2)
-            else:
-                raise TypeError("format() missing 1 required positional "
-                                "argument: 'format_string'") from None
+            raise TypeError("format() missing 1 required positional "
+                            "argument: 'format_string'") from None
         return self.vformat(format_string, args, kwargs)
 
     def vformat(self, format_string, args, kwargs):
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
@@ -48,9 +48,8 @@
         self.assertEqual(fmt.format("-{format_string}-", format_string='test'),
                          '-test-')
         self.assertRaises(KeyError, fmt.format, "-{format_string}-")
-        with self.assertWarnsRegex(DeprecationWarning, "format_string"):
-            self.assertEqual(fmt.format(arg='test', format_string="-{arg}-"),
-                             '-test-')
+        with self.assertRaisesRegex(TypeError, "format_string"):
+            fmt.format(format_string="-{arg}-", arg='test')
 
     def test_auto_numbering(self):
         fmt = string.Formatter()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -212,6 +212,9 @@
 Library
 -------
 
+- Issue #29193: A format string argument for string.Formatter.format()
+  is now positional-only.
+
 - Issue #29195: Removed support of deprecated undocumented keyword arguments
   in methods of regular expression objects.
 

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


More information about the Python-checkins mailing list