[New-bugs-announce] [issue39985] str.format and string.Formatter subscript behaviors diverge
Maxwell Bernstein
report at bugs.python.org
Mon Mar 16 21:42:20 EDT 2020
New submission from Maxwell Bernstein <tekk.nolagi at gmail.com>:
As I understand it, str.format and string.Formatter are supposed to behave the
same, with string.Formatter being a pluggable variant. While poking at
string.Formatter, I noticed that they do not behave the same when formatting a
nameless subscript:
```
import string
str.format("{[0]}", "hello") # => "h"
string.Formatter().format("{[0]}", "hello") # => KeyError("")
```
They seem to work the same in the case where the arg is either indexed by
number or by name:
```
import string
str.format("{0[0]}", "hello") # => "h"
string.Formatter().format("{0[0]}", "hello") # => "h"
str.format("{a[0]}", a="hello") # => "h"
string.Formatter().format("{a[0]}", a="hello") # => "h"
```
After some digging, I have come up with a couple ideas:
* Change _string.formatter_field_name_split to treat an empty string field name
as 0, so that string.Formatter.get_value looks up the arg in args, instead of
kwargs
* Change string.Formatter.get_value to treat empty string key as 0, and look up
the arg in args, instead of kwargs
I'm happy to submit a PR if people find one of these two solutions palatable or
have some solutions of their own.
(Note: this may appear in other versions, but I don't have them on my machine
to test.)
----------
components: Library (Lib)
messages: 364382
nosy: tekknolagi
priority: normal
severity: normal
status: open
title: str.format and string.Formatter subscript behaviors diverge
type: behavior
versions: Python 2.7, Python 3.6, Python 3.7
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue39985>
_______________________________________
More information about the New-bugs-announce
mailing list