我在使用带有类似Python字典的字符串的format
时遇到问题。
我想生成以下字符串:{"one":1}
如果我尝试这样做:
'{"one":{}}'.format(1)
解释器抛出KeyError:
>>> a = '{"one":{}}'.format(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '"one"'
我理解该问题可能围绕字符串包含{
这一事实,这可能与format
{}
混淆。为什么会发生这种情况?如何解决?
我知道格式百分比,但我想找到一个不涉及放弃format()
的解决方案。
答案 0 :(得分:17)
'{"one": {}}'
的格式为using an identifier as the field_name
,基本上会尝试查找已提供给.format
并且名称为'"one"'
的关键字参数。
正如文档所述:
field_name
本身以arg_name
开头,KeyError
是数字或关键字。如果是数字,则表示位置参数,如果是关键字,则表示命名关键字参数。
(强调我的)
这就是你得到format
例外的原因;它试图在提供给>>> '{{"one":{}}}'.format(1)
'{"one":1}'
的关键字参数的映射中查找关键字。 (在这种情况下,它是空的,因此是错误的。)
作为解决方案,只需逃避外部花括号:
f
如果您决定在将来使用>>> f'{{"one": {1}}}'
'{"one": 1}'
字符串,则适用相同的补救措施:
<div class="down">
答案 1 :(得分:13)
你需要加倍大括号}}
a= '{{"one":{}}}'.format(1)
来摆脱字符串格式的大括号。
{}
来自doc:
格式字符串包含由大括号括起的“替换字段”
{{
。任何未包含在大括号中的内容都被视为文字 文本,未更改地复制到输出。如果你需要包括 文字文本中的大括号字符,可以通过加倍来转义:}}
和str.format()
。
如果你没有转义大括号,'"one"'
会查找键b = '{"one"} foo'.format(**{'"one"':1})
print(b) # 1 foo
的值来格式化字符串。例如:
{{1}}
答案 2 :(得分:1)
使用双括号可以转义大括号,使用:
'{{"one":{}}}'.format(1)