str.format()的意外行为

时间:2015-11-10 19:22:52

标签: python python-2.7 python-3.x

我正在以这种方式使用模板:

data = {'root':{'childrens':[1,2]}}
print('{data[root][childrens][0]}'.format(**locals()))

按预期输出1,但是当我运行此代码时:

print('{data[root][childrens][-1]}'.format(**locals()))

我得到了这个例外:

Traceback (most recent call last):
...
    '{data[root][childrens][-1]}'.format(**locals())
TypeError: list indices must be integers or slices, not str

2 个答案:

答案 0 :(得分:2)

基于doc

element_index     ::=  integer | index_string

-1被视为expression,而不是integer

question中还有有用的信息。

答案 1 :(得分:1)

来自PEP 3101的说明:

应该注意在格式字符串中使用'getitem'     比传统用途更受限制。在上面的例子中,     字符串'name'实际上是文字字符串'name',而不是变量     命名为'name'。解析项密钥的规则非常简单。     如果它以数字开头,则将其视为数字,否则     它用作字符串。