diff -r 20f18e5e8bfc Doc/library/string.rst --- a/Doc/library/string.rst Sat Jan 07 00:08:29 2017 +0100 +++ b/Doc/library/string.rst Sat Jan 07 13:22:47 2017 +0200 @@ -95,9 +95,9 @@ implementation as the built-in :meth:`~s 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 is :ref:`positional-only parameter + `. .. method:: vformat(format_string, args, kwargs) diff -r 20f18e5e8bfc Lib/string.py --- a/Lib/string.py Sat Jan 07 00:08:29 2017 +0100 +++ b/Lib/string.py Sat Jan 07 13:22:47 2017 +0200 @@ -175,14 +175,8 @@ class Formatter: 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 -r 20f18e5e8bfc Lib/test/test_string.py --- a/Lib/test/test_string.py Sat Jan 07 00:08:29 2017 +0100 +++ b/Lib/test/test_string.py Sat Jan 07 13:22:47 2017 +0200 @@ -48,9 +48,8 @@ class ModuleTest(unittest.TestCase): 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(arg='test', format_string="-{arg}-") def test_auto_numbering(self): fmt = string.Formatter()