为什么在Python 3.6中评估f"\{10}"时符号'{'会保留?

13
f-string是Python 3.6中的新功能之一。
但是当我尝试这样做时:
>>> f"\{10}"
'\\{10'

我无法理解为什么左花括号 '{' 会出现在结果中。我认为结果应该与 str.format 相同:
>>> "\{}".format(10)
'\\10'

PEP-0498中没有明确回答这个问题。那么是什么导致左花括号 '{' 保留在结果中,以及什么导致了f-stringstr.format()之间的差异?
1个回答

13

这是一个错误。目前有效的方法是使用Unicode文字\u005c 来代替 \

>>> f'\u005c{10}'
'\\10'

或者,使用原始的f字符串也可以达到类似的效果:

>>> rf'\{10}'
'\\10'

使用 '\' 似乎会导致两件奇怪的事情同时发生:

  • 下一个字符(这里是 '{')被转义,因此会出现在结果字符串中。
  • 格式化字符串也会被计算,这很奇怪并且不是预期行为。

例如:

>>> f'\{2+3}'
'\\{5'
>>> a = 20
>>> f'\{a+30}'
'\\{50'

无论如何,我很快就会填写一个错误报告(因为我看到你还没有),并在得到回复后进行更新。

更新:创建了 Issue 29104 - 反斜杠在格式化字符串结果中产生左括号,如果您感兴趣,请查看那里的对话。

更新2:使用PR 490已解决该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接