python字符串上的格式给出错误

时间:2018-08-10 03:23:45

标签: python format

在python中,我试图通过format()创建一个字符串

json_data_resp = '{"error":false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}'.format(activation_code, macaddress)

当我执行此代码时,它给了我这样的错误:

  

KeyError:'“错误”'

我做错了什么?

4 个答案:

答案 0 :(得分:1)

您应该通过将它们加倍来转义大括号:

json_data_resp = '{{"error":false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}}'.format(activation_code, macaddress)

摘录自Format String Syntax

  

格式字符串包含用花括号括起来的“替换字段”   {}。大括号中不包含的所有内容均视为文字   文本,原样复制到输出中。如果您需要包括   文字文本中的大括号字符,可以通过加倍转义:   {{}}

答案 1 :(得分:0)

您可以进行'%'的字符串格式化:

json_data_resp = '{"error":false,"code":"%s","mac":"%s","message":"Device configured successfully"}'%(activation_code, macaddress)

答案 2 :(得分:0)

它试图在整个字符串周围的花括号内插入一个变量。如果要在格式化的字符串中包含大括号,则必须使用两个。

string = "{{test_number: {0}}}".format(37)

答案 3 :(得分:0)

Format strings在花括号内有字段。每个字段都有一个可选的数字,名称或表达式,以及可选的:spec和可选的!conversion

因此,当您将其用作格式字符串时:

'{"error":false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}'

您有一个名为"error"的字段,其规范为false,"code":"{0}","mac":"{1}","message":"Device configured successfully"

要设置该字段的格式,您需要一个名为"error"的关键字参数,当然您没有一个。


很显然,您不希望整个事情都成为一个领域。但这意味着您需要通过将括号加倍来逃避括号:

'{{"error": false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}}'

或者更好,...为什么首先要尝试通过str.format创建JSON字符串?为什么不创建字典并将其序列化呢?

json_data_resp = json.dumps({
    "error": False, "code": activation_code, "mac": macaddress,
    "message": "Device configured successfully"})