格式:在字符串中使用大括号时出现 KeyError

Format: KeyError when using curly brackets in strings

我是运行以下代码:

asset = {}
asset['abc'] = 'def'
print type(asset)
print asset['abc']
query = '{"abc": "{abc}"}'.format(abc=asset['abc'])
print query

抛出 KeyError 错误:

[user@localhost] : ~/Documents/vision/inputs/perma_sniff $ python ~/test.py 
<type 'dict'>
def
Traceback (most recent call last):
  File "/home/user/test.py", line 5, in <module>
    query = '\{"abc": "{abc}"\}'.format(abc=asset['abc'])
KeyError: '"abc"'

格式显然被包装弄糊涂了 {。如何确保格式仅尝试替换(正确的)内部 {abc}.

即,预期输出为:

{"abc": "def"}

(我知道我可以使用 json 模块来完成这项任务,但我想避免这种情况。我宁愿使用格式。)

要插入文字大括号,将其加倍:

query = '{{"abc": "{abc}"}}'.format(abc=asset['abc'])

(有记载here,但没有特别明显地突出显示)。

用大括号包裹外括号:

query = '{{"abc": "{abc}"}}'.format(abc=asset['abc'])
print query
{"abc": "def"}

最上面的大括号被解释为字符串中的占位符键,因此您得到 KeyError。你需要像这样逃避它们:

asset = {}
asset['abc'] = 'def'
query = '{{"abc": "{abc}"}}'.format(**asset)

然后:

>>> print query
{"abc": "def"}