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

Why does the symbol '{' remain when f"\{10}" is evaluated in Python 3.6?

f-string 是 Python 3.6 中的新功能之一。

但是当我尝试这个时:

>>> f"\{10}"
'\{10'

我不明白为什么左花括号 '{' 保留在结果中。我认为结果应该与 str.format:

相同
>>> "\{}".format(10)
'\10'

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

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

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

或者,使用原始 f-string:

具有类似的效果
>>> rf'\{10}'
'\10'

通过使用'\'似乎同时发生了两件奇怪的事情:

  • 下一个字符(此处为 '{')被转义,将其留在结果字符串中。
  • 格式化的字符串也求值,这很奇怪,不是预期的

例证:

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

无论如何,我会尽快填写错误报告(因为我发现你还没有)并在收到回复时更新。

更新:已创建 Issue 29104 -- Left bracket remains in format string result when '\' preceeds it,如果您有兴趣,请查看那里的对话。

更新 2:问题已通过 PR 490 解决。