【问题标题】:Slicing a string from inside a formatted string gives 'TypeError: string indices must be integers'从格式化字符串中切片字符串会给出“TypeError:字符串索引必须是整数”
【发布时间】:2019-09-14 07:28:43
【问题描述】:

这两个命令不应该做同样的事情吗?

>>> "{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'

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

【问题讨论】:

  • 关于为什么特定功能没有在 Python 中实现的问题实际上并不在一个好的 Stack Overflow 问题的范围内。 “因为这就是它的设计工作方式”不一定是一个令人满意的答案。我们所拥有的只是意见,除非其中一位 Python 开发人员碰巧碰巧。但是,我会注意到 f 字符串确实支持切片。

标签: python string format


【解决方案1】:

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

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

在字典键周围没有引号的情况下工作。当然,这种简单性也有限制,例如无法引用其中包含 ] 的键,或者无法解释切片,如您的示例所示。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2021-03-28
    • 2021-04-28
    相关资源
    最近更新 更多