为什么在 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-string
和 str.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 解决。
f-string
是 Python 3.6 中的新功能之一。
但是当我尝试这个时:
>>> f"\{10}"
'\{10'
我不明白为什么左花括号 '{'
保留在结果中。我认为结果应该与 str.format
:
>>> "\{}".format(10)
'\10'
在PEP-0498中它没有明确回答这个问题。那么是什么原因导致左花括号 '{'
保留在结果中以及是什么原因导致 f-string
和 str.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 解决。