13

f-string是 Python 3.6 中的新特性之一。

但是当我尝试这个时:

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

我无法弄清楚为什么左花括号'{'仍然在结果中。我认为结果应该与str.format

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

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

4

1 回答 1

13

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

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

或者,具有类似效果,使用原始f字符串:

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

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

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

一个例子:

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

无论哪种方式,我都会很快填写错误报告(因为我看到你还没有)并在收到回复时更新。

更新:已创建问题 29104 - 左括号在 '\' 之前保留在格式字符串结果中,如果您有兴趣查看那里的对话。

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

于 2016-12-27T02:02:03.613 回答