use*_*462 11 python string string-formatting python-3.x
我在使用format
看起来像Python字典的字符串时遇到问题.
我想生成以下字符串:{"one":1}
如果我尝试这样做:
'{"one":{}}'.format(1)
Run Code Online (Sandbox Code Playgroud)
解释器抛出一个KeyError:
>>> a = '{"one":{}}'.format(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '"one"'
Run Code Online (Sandbox Code Playgroud)
据我所知,这个问题大概在该字符串中包含的事实围绕{
,可以用混淆format
的{}
.为什么会发生这种情况,如何解决?
我知道百分比格式,但我想找到一个不涉及开沟的解决方案format()
.
Jim*_*ard 17
的格式'{"one": {}}'
是使用标识符作为field_name
和将主要试图寻找一个已经提供给关键字参数.format
,并命名'"one"'
.
正如文档所述:
它
field_name
本身以arg_name
数字或关键字开头.如果它是一个数字,它引用一个位置参数,如果它是一个关键字,它引用一个命名关键字参数.
(强调我的)
这就是你得到KeyError
例外的原因; 它试图在提供给关键字参数的映射中查找关键字format
.(在这种情况下,它是空的,因此错误).
作为解决方案,只需逃避外部花括号:
>>> '{{"one":{}}}'.format(1)
'{"one":1}'
Run Code Online (Sandbox Code Playgroud)
如果您决定在f
将来使用-strings,则适用相同的补救措施:
>>> f'{{"one": {1}}}'
'{"one": 1}'
Run Code Online (Sandbox Code Playgroud)
flo*_*urr 13
你需要加倍花括号{{
}}
来转义字符串格式的花括号.
a= '{{"one":{}}}'.format(1)
Run Code Online (Sandbox Code Playgroud)
来自doc:
格式字符串包含由大括号括起的"替换字段"
{}
.大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中.如果你需要在文字文本中包含一个大括号字符,可以通过加倍来转义它:{{
和}}
.
如果你没有转义大括号,str.format()
将查找key的值'"one"'
来格式化字符串.例如:
b = '{"one"} foo'.format(**{'"one"':1})
print(b) # 1 foo
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1331 次 |
最近记录: |