Terry J. Reedy <[email protected]> added the comment:
Doc/library/string.rst string.Formatter().format(fmt, 10)needs a couple of
changes also.
1. "format(format_string, *args, **kwargs)
format() is the primary API method. It takes a format template string,"
I think 'template' should be removed as we elsewhere (as in the next section)
just call them 'format strings'.
Note: I consider this and the preceding sentences
"The built-in string class provides the ability to do complex variable
substitutions and value formatting via the format() method described in PEP
3101. The Formatter class in the string module allows you to create and
customize your own string formatting behaviors using the same implementation as
the built-in format() method."
to imply that this method should accept any format string that str.format does,
and that the patch is a bug fix rather than enhancement. There is no mention of
any limitation or subseting.
2. "convert_field(value, conversion)
Converts the value (returned by get_field()) given a conversion type (as in the
tuple returned by the parse() method). The default version understands ‘r’
(repr) and ‘s’ (str) conversion types."
Change "‘r’ (repr) and ‘s’ (str)" to "‘s’ (str), ‘r’ (repr), and ‘a’ (ascii)".
I consider this a bug in the doc.
---
I discovered that string.Formatter.format has another problem:
it does not auto-number fields
>>> '{0}'.format(10) == '{}'.format(10) == '10'
True
>>> from string import Formatter as F
>>> F().format('{0}', 10)
'10'
>>> F().format('{}', 10)
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
F().format('{}', 10)
File "C:\Programs\Python32\lib\string.py", line 180, in format
return self.vformat(format_string, args, kwargs)
File "C:\Programs\Python32\lib\string.py", line 184, in vformat
result = self._vformat(format_string, args, kwargs, used_args, 2)
File "C:\Programs\Python32\lib\string.py", line 206, in _vformat
obj, arg_used = self.get_field(field_name, args, kwargs)
File "C:\Programs\Python32\lib\string.py", line 267, in get_field
obj = self.get_value(first, args, kwargs)
File "C:\Programs\Python32\lib\string.py", line 226, in get_value
return kwargs[key]
KeyError: ''
So it seems that str.format is either calling something other than
_string.formatter_parser or else pre or post processing.
The underlying problem is trying to keep separate codes that do the same thing
in sync without testing both with the same set of examples. If examples were in
a table of (fmt, args, kwargs, output) tuples, it would be easy to call
fmt.format(*args, **kwargs) and F().vformat(fmt, args, kwargs) with each and
compare to expected. There are also the %format torture tests in
test_format.py. Do % and {} formatting use any of the same code?
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue13579>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com