New submission from Raymond Hettinger <rhettin...@users.sourceforge.net>:
The old % formatting allowed arbitrary mappings: >>> class Default(dict): ... def __missing__(self, key): ... return key ... >>> s = '%(name)s was born in %(country)s' >>> s % Default(name='Guido') 'Guido was born in country' But the new str.format() demands mappings be first converted to a regular dict using **kwargs, so something like the above is not possible. >>> s = '{name} was born in {country}' >>> s.format(**Default(name='Guido')) Traceback (most recent call last): File "<pyshell#27>", line 1, in <module> s.format(**Default(name='Guido')) KeyError: 'country' There is a work-around using string.vformat() but it is obscure and awkward: >>> import string >>> string.Formatter().vformat(s, (), Default(name='Guido')) 'Guido was born in country' Instead, it would be better to offer an alternate method: >>> s.format_from_mapping(Default(name='Guido')) 'Guido was born in country' ---------- messages: 88173 nosy: rhettinger severity: normal status: open title: str.format_from_mapping() type: feature request versions: Python 2.7, Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue6081> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com