非工作示例:
print(" \{ Hello \} {0} ".format(42))
所需输出:
{Hello} 42
非工作示例:
print(" \{ Hello \} {0} ".format(42))
所需输出:
{Hello} 42
当前回答
我使用了双{{}}来防止fstring值注入,
例如,这里是我的Postgres UPDATE语句,用于更新整数数组列,该列采用表达式{}来捕获数组,即:
ports=“{100200300}”
使用fstrings,
ports = [1,2,3]
query = f"""
UPDATE table SET ports = '{{{ports}}}' WHERE id = 1
"""
实际查询语句将是,
UPDATE table SET ports = '{1,2,3}'
这是一个有效的延期
其他回答
您可以使用“引号墙”将格式化字符串部分与常规字符串部分分开。
发件人:
print(f"{Hello} {42}")
to
print("{Hello}"f" {42}")
一个更清楚的例子是
string = 10
print(f"{string} {word}")
输出:
NameError: name 'word' is not defined
现在,添加报价墙,如下所示:
string = 10
print(f"{string}"" {word}")
输出:
10 {word}
我最近遇到了这个问题,因为我想将字符串注入到预先格式化的JSON中。我的解决方案是创建一个助手方法,如下所示:
def preformat(msg):
""" allow {{key}} to be used for formatting in text
that already uses curly braces. First switch this into
something else, replace curlies with double curlies, and then
switch back to regular braces
"""
msg = msg.replace('{{', '<<<').replace('}}', '>>>')
msg = msg.replace('{', '{{').replace('}', '}}')
msg = msg.replace('<<<', '{').replace('>>>', '}')
return msg
然后,您可以执行以下操作:
formatted = preformat("""
{
"foo": "{{bar}}"
}""").format(bar="gas")
如果性能不是问题,则获取完成的作业。
如果在可以格式化的f-string模板中需要大括号,则需要在f-string的一组大括号中输出包含两个大括号的字符串:
css_template = f"{{tag}} {'{{'} margin: 0; padding: 0;{'}}'}"
for_p = css_template.format(tag="p")
# 'p { margin: 0; padding: 0;}'
原因是,{}是.format()的语法,因此在您的情况下.format)无法识别{Hello},因此引发了错误。
可以通过使用双花括号{{}}来覆盖它,
x = " {{ Hello }} {0} "
or
尝试%s进行文本格式化,
x = " { Hello } %s"
print x%(42)
您想用字符{或}格式化字符串
你只需要把它们加倍。
格式{带有f“{{”,}带有f‘}}”
So :
name = "bob"
print(f'Hello {name} ! I want to print }} and {{ or {{ }}')
输出:
你好,鲍勃!我想打印}和{或{}
对于确切的示例,OR:
number = 42
print(f'{{Hello}} {number}')
将打印:
{你好}42