在使用.format时如何转义字符串中的花括号({})字符

在使用.format时如何转义字符串中的花括号({})字符

技术背景

在 Python 中,使用 .format() 方法或 f-strings 进行字符串格式化时,花括号 {} 有特殊的用途,用于表示替换字段。若要在字符串中包含字面意义的花括号,就需要对其进行转义,否则会引发错误。

实现步骤

1. 使用双花括号转义

.format() 方法中,将单个花括号 {} 替换为双花括号 {{` 和 `}} 来进行转义。

1
2
x = " {{ Hello }} {0} "
print(x.format(42))

在 f-strings 中同样如此:

1
2
n = 42
print(f" {{Hello}} {n} ")

2. 解决表达式解析问题

如果需要在括号内解析表达式,需使用三组括号:

1
2
hello = "HELLO"
print(f"{{{hello.lower()}}}")

3. 处理 JSON 字符串

在处理 JSON 字符串时,使用 json 库会更清晰:

1
2
3
4
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
print(json.dumps(mydict))

4. 结合普通字符串和 f-strings

为避免大量使用双花括号,可以将普通字符串和 f-strings 结合使用:

1
2
3
4
number = 42
print("{The answer is} "
f"{number}"
" {thanks for all the fish}")

5. 自定义格式化函数

可以定义一个自定义格式化函数,使用任意括号替代:

1
2
3
4
5
6
7
8
9
def custom_format(string, brackets, *args, **kwargs):
if len(brackets) != 2:
raise ValueError('Expected two brackets. Got {}.'.format(len(brackets)))
padded = string.replace('{', '{{').replace('}', '}}')
substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}')
formatted = substituted.format(*args, **kwargs)
return formatted

print(custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe'))

6. 安全格式化字符串函数

创建一个安全格式化字符串的函数,避免变量未找到时引发异常:

1
2
3
4
5
6
7
8
9
10
11
12
13
def format_string_safe(text:str, **kwargs):
if text is None:
return ''
result = text
try:
for k in kwargs:
result = result.replace(f'{{{k}}}', str(kwargs[k]))
return result
except Exception as ex:
print_traceback(ex)
return text

print(format_string_safe('THis is my text with some {vars}.', vars=22))

最佳实践

  • 在处理简单的字符串格式化时,优先使用双花括号转义。
  • 处理复杂的 JSON 字符串时,使用 json 库。
  • 当字符串中包含大量需要转义的花括号时,考虑使用自定义格式化函数或结合普通字符串和 f-strings。

常见问题

1. 未正确转义花括号导致的错误

如果未对花括号进行转义,.format() 方法或 f-strings 会将其视为替换字段,可能导致 KeyErrorIndexError。解决方法是使用双花括号进行转义。

2. 变量未找到的错误

在 f-strings 中,如果引用了未定义的变量,会引发 NameError。可以通过结合普通字符串和 f-strings 来避免此问题。

3. 性能问题

如果需要频繁进行字符串格式化,自定义格式化函数或多次替换操作可能会影响性能。在这种情况下,可以考虑其他优化方法。


在使用.format时如何转义字符串中的花括号({})字符
https://119291.xyz/posts/escape-curly-brace-characters-in-string-using-format/
作者
ww
发布于
2025年5月13日
许可协议