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 次 |
| 最近记录: |