【问题标题】:Format: KeyError when using curly brackets in strings格式:在字符串中使用大括号时出现 KeyError
【发布时间】:2015-10-29 20:06:09
【问题描述】:

我正在运行以下代码:

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 模块来完成这项任务,但我想避免这种情况。我更愿意使用格式。)

【问题讨论】:

    标签: python format


    【解决方案1】:

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

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

    (这已记录在 here,但没有特别明显地突出显示)。

    【讨论】:

      【解决方案2】:

      用大括号包裹外部大括号:

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

      【讨论】:

      • 认为你的双右大括号用错了。应该是:'{{"abc": "{abc}"}}'
      • @tom,是的,错字已修复
      【解决方案3】:

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

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

      然后:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多