]> granicus.if.org Git - python/commitdiff
whatsnew: object.__format__ raises TypeError on non-empty string.
authorR David Murray <rdmurray@bitdance.com>
Tue, 11 Feb 2014 23:34:22 +0000 (18:34 -0500)
committerR David Murray <rdmurray@bitdance.com>
Tue, 11 Feb 2014 23:34:22 +0000 (18:34 -0500)
See issues #7994 and #9856.  I also modified with wording of the format doc
entry to better match what really happens, and added a versionchanged to the
datamodel object.__format__ section.

Doc/library/functions.rst
Doc/reference/datamodel.rst
Doc/whatsnew/3.4.rst

index 4371969464bfb12d4456973e72bfe282c9ffe912..57f015b014369f6b000ee7cea5bfb78704223a08 100644 (file)
@@ -540,12 +540,13 @@ are always available.  They are listed here in alphabetical order.
    A call to ``format(value, format_spec)`` is translated to
    ``type(value).__format__(format_spec)`` which bypasses the instance
    dictionary when searching for the value's :meth:`__format__` method.  A
-   :exc:`TypeError` exception is raised if the method is not found or if either
-   the *format_spec* or the return value are not strings.
+   :exc:`TypeError` exception is raised if the method search reaches
+   :mod:`object` and the *format_spec* is non-empty, or if either the
+   *format_spec* or the return value are not strings.
 
-   .. versionadded:: 3.4
+   .. versionchanged:: 3.4
       ``object().__format__(format_spec)`` raises :exc:`TypeError`
-      if *format_spec* is not empty string.
+      if *format_spec* is not an empty string.
 
 
 .. _func-frozenset:
index 4f19b37cd26cf27814b6de1151be45f0350b0c4b..b2aa98bf718877d2f431d36fb24fbb1d979320e1 100644 (file)
@@ -1226,6 +1226,10 @@ Basic customization
 
    The return value must be a string object.
 
+   .. versionchanged:: 3.4
+      The __format__ method of ``object`` itself raises a :exc:`TypeError`
+      if passed any non-empty string.
+
 
 .. _richcmpfuncs:
 .. method:: object.__lt__(self, other)
index e235564efaef401064b2a6beb196cab82f68aab2..8ce4c54a1198d0af5d6934675bf8fa27ac3f8913 100644 (file)
@@ -1600,6 +1600,15 @@ removed:
 * :class:`inspect.Signature`: positional-only parameters are now required
   to have a valid name.
 
+* :meth:`object.__format__` no longer accepts non-empty format strings, it now
+  raises a :exc:`TypeError` instead.  Using a non-empty string has been
+  deprecated since Python 3.2.  This change has been made to prevent a
+  situation where previously working (but incorrect) code would start failing
+  if an object gained a __format__ method, which means that your code may now
+  raise a :exc:`TypeError` if you are using an ``'s'`` format code with objects
+  that do not have a __format__ method that handles it.  See :issue:`7994` for
+  background.
+
 
 Code Cleanups
 -------------