【问题标题】:How to escape curly-brackets in f-strings? [duplicate]如何在 f 字符串中转义大括号? [复制]
【发布时间】:2023-06-22 09:44:01
【问题描述】:

我有一个字符串,我想要花括号,但也利用 f-strings 功能。是否有一些适用于此的语法?

这里有两种方法不起作用。我想将文字文本 {bar} 作为字符串的一部分。

foo = "test"
fstring = f"{foo} {bar}"

NameError: name 'bar' is not defined

fstring = f"{foo} \{bar\}"

SyntaxError: f-string expression part cannot include a backslash

想要的结果:

'test {bar}'

编辑:看起来这个问题的答案与How can I print literal curly-brace characters in a string and also use .format on it? 相同,但只有知道str.format 使用与f-string 相同的规则才能知道。所以希望这个问题在将 f-string 搜索者与这个答案联系起来时有价值。

【问题讨论】:

  • 您可以将'{'和'}'替换为它们对应的代码点\u007b\u007d。例如print(' \u007b \u007d')得到{ }
  • 这实际上应该是一个/答案,因为如果您想打印单个大括号,则将大括号加倍不起作用。哦,我现在是不是觉得很脏。
  • @stefanct 你是什么意思不起作用? f'{{1{2}' 正确返回 '{12',不是吗?
  • 是的,但是有很多情况下它不起作用,例如,f'{{}' -> SyntaxError: f-string: single '}' is not allowed
  • @stefanct 仍然没有看到问题 - 你认为应该返回什么?如果您不格式化任何字段,为什么要使用 f 前缀?

标签: python python-3.x curly-braces f-string


【解决方案1】:

尽管解析器存在自定义语法错误,但 same trick 的作用与在常规字符串上调用 .format 相同。

使用双花括号:

>>> foo = 'test'
>>> f'{foo} {{bar}}'
'test {bar}'

在规范 here 和文档 here 中提到。

【讨论】: