Issue #29193: A format string argument for string.Formatter.format()

is now positional-only.
This commit is contained in:
Serhiy Storchaka 2017-01-13 09:10:51 +02:00
parent b37f3f6e6b
commit 009b0a1fac
5 changed files with 16 additions and 14 deletions

View File

@ -95,9 +95,9 @@ implementation as the built-in :meth:`~str.format` method.
an arbitrary set of positional and keyword arguments. an arbitrary set of positional and keyword arguments.
It is just a wrapper that calls :meth:`vformat`. It is just a wrapper that calls :meth:`vformat`.
.. deprecated:: 3.5 .. versionchanged:: 3.7
Passing a format string as keyword argument *format_string* has been A format string argument is now :ref:`positional-only
deprecated. <positional-only_parameter>`.
.. method:: vformat(format_string, args, kwargs) .. method:: vformat(format_string, args, kwargs)

View File

@ -147,3 +147,9 @@ This section lists previously described changes and other bugfixes
that may require changes to your code. 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`.)

View File

@ -175,14 +175,8 @@ class Formatter:
try: try:
format_string, *args = args # allow the "format_string" keyword be passed format_string, *args = args # allow the "format_string" keyword be passed
except ValueError: except ValueError:
if 'format_string' in kwargs: raise TypeError("format() missing 1 required positional "
format_string = kwargs.pop('format_string') "argument: 'format_string'") from None
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
return self.vformat(format_string, args, kwargs) return self.vformat(format_string, args, kwargs)
def vformat(self, format_string, args, kwargs): def vformat(self, format_string, args, kwargs):

View File

@ -48,9 +48,8 @@ class ModuleTest(unittest.TestCase):
self.assertEqual(fmt.format("-{format_string}-", format_string='test'), self.assertEqual(fmt.format("-{format_string}-", format_string='test'),
'-test-') '-test-')
self.assertRaises(KeyError, fmt.format, "-{format_string}-") self.assertRaises(KeyError, fmt.format, "-{format_string}-")
with self.assertWarnsRegex(DeprecationWarning, "format_string"): with self.assertRaisesRegex(TypeError, "format_string"):
self.assertEqual(fmt.format(arg='test', format_string="-{arg}-"), fmt.format(format_string="-{arg}-", arg='test')
'-test-')
def test_auto_numbering(self): def test_auto_numbering(self):
fmt = string.Formatter() fmt = string.Formatter()

View File

@ -212,6 +212,9 @@ Core and Builtins
Library Library
------- -------
- Issue #29193: A format string argument for string.Formatter.format()
is now positional-only.
- Issue #29195: Removed support of deprecated undocumented keyword arguments - Issue #29195: Removed support of deprecated undocumented keyword arguments
in methods of regular expression objects. in methods of regular expression objects.