[New-bugs-announce] [issue27307] string.Formatter does not support key/attribute access on unnumbered fields

Tommy Beadle report at bugs.python.org
Mon Jun 13 11:32:42 EDT 2016


New submission from Tommy Beadle:

Support for unnumbered fields in string.Formatter.format was added in http://bugs.python.org/issue13598, however, it does not support accessing an index or attribute of an unnumbered field like str.format does.  Instead, it raises an unhelpful "KeyError: ''":

In [1]: import string

In [2]: fmt = string.Formatter()

In [3]: fmt.format('{[0]}', ['a', 'b'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-3-a923004fe8e8> in <module>()
----> 1 fmt.format('{[0]}', ['a', 'b'])

/usr/lib64/python2.7/string.pyc in format(*args, **kwargs)
    557                 raise TypeError("format() missing 1 required positional "
    558                                 "argument: 'format_string'")
--> 559         return self.vformat(format_string, args, kwargs)
    560 
    561     def vformat(self, format_string, args, kwargs):

/usr/lib64/python2.7/string.pyc in vformat(self, format_string, args, kwargs)
    561     def vformat(self, format_string, args, kwargs):
    562         used_args = set()
--> 563         result = self._vformat(format_string, args, kwargs, used_args, 2)
    564         self.check_unused_args(used_args, args, kwargs)
    565         return result

/usr/lib64/python2.7/string.pyc in _vformat(self, format_string, args, kwargs, used_args, recursion_depth)
    583                 # given the field_name, find the object it references
    584                 #  and the argument it came from
--> 585                 obj, arg_used = self.get_field(field_name, args, kwargs)
    586                 used_args.add(arg_used)
    587 

/usr/lib64/python2.7/string.pyc in get_field(self, field_name, args, kwargs)
    644         first, rest = field_name._formatter_field_name_split()
    645 
--> 646         obj = self.get_value(first, args, kwargs)
    647 
    648         # loop through the rest of the field_name, doing

/usr/lib64/python2.7/string.pyc in get_value(self, key, args, kwargs)
    603             return args[key]
    604         else:
--> 605             return kwargs[key]
    606 
    607 

KeyError: ''


The attached patch adds this functionality.

aronancher asked in http://bugs.python.org/issue13598#msg218114 if the original patch was going to make it in to python 2.7.  Perhaps that could get a look?

----------
components: Library (Lib)
messages: 268452
nosy: tbeadle
priority: normal
severity: normal
status: open
title: string.Formatter does not support key/attribute access on unnumbered fields
type: behavior
versions: Python 2.7, Python 3.2, Python 3.3, Python 3.4, Python 3.5, Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue27307>
_______________________________________


More information about the New-bugs-announce mailing list