Python 从格式化字符串内部切片字符串会得到';TypeError:字符串索引必须是整数';

Python 从格式化字符串内部切片字符串会得到';TypeError:字符串索引必须是整数';,python,string,format,Python,String,Format,这两个命令不应该做相同的事情吗 >“{0[0:5]}”。格式(“lorem ipsum”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:字符串索引必须是整数 >>“{0}”。格式(“lorem ipsum”[0:5]) “洛雷姆” 命令 >>“{0[0]}”。格式(“lorem ipsum”) “我 及 >>“{0}”。格式(“lorem ipsum”[0]) “我 评估相同的结果。(我知道我可以使用其他方法来实现这一点,我主要只是好奇它为什么不起作用)库处

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

>“{0[0:5]}”。格式(“lorem ipsum”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:字符串索引必须是整数
>>“{0}”。格式(“lorem ipsum”[0:5])
“洛雷姆”
命令

>>“{0[0]}”。格式(“lorem ipsum”)
“我

>>“{0}”。格式(“lorem ipsum”[0])
“我

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

库处理
str.format
语法,只支持一些与常规Python语法不同的“表达式”语法。比如说,

"{0[foo]}".format(dict(foo=2))  # "2"
在字典键周围不加引号。当然,这种简单性也有一些限制,比如不能引用包含
]
的键,或者解释一个片段,如您的示例中所示


请注意,kendall提到的f字符串由编译器处理并(适当地)使用。他们需要这种能力,因为他们缺乏将这些表达式放在参数列表中以
格式

的明显替代方法。关于为什么Python中没有实现特定功能的问题实际上不在好的堆栈溢出问题的范围之内。“因为这就是它的工作原理”不一定是一个令人满意的答案。我们所拥有的只是意见,除非有一位Python开发人员碰巧经过。但是,我会注意到f字符串确实支持切片。