从格式化的字符串内部切片字符串会产生“ TypeError:字符串索引必须为整数”

时间:2019-04-24 22:47:15

标签: python string format

这两个命令不应该做同一件事吗?

>>> "{0[0:5]}".format("lorem ipsum")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
>>> "{0}".format("lorem ipsum"[0:5])
'lorem'

命令

>>> "{0[0]}".format("lorem ipsum")
'l'

>>> "{0}".format("lorem ipsum"[0])
'l'

评估相同。 (我知道我可以使用其他方法来做到这一点,我主要是想知道为什么它不起作用)

1 个答案:

答案 0 :(得分:1)

str.format语法由库处理,仅支持几种与常规Python语法不同的“表达式”语法。例如,

"{0[foo]}".format(dict(foo=2))  # "2"

可以在字典键周围不加引号。当然,这种简单性有局限性,例如无法引用其中带有]的键,或者像您的示例一样解释切片。

请注意,kendall提到的f字符串由编译器处理,并且(适当地)使用(almost) unrestricted expression syntax。他们需要这种能力,因为他们缺乏将这些表达式放在自变量列表中format的明显选择。