在python中,我试图通过format()创建一个字符串
json_data_resp = '{"error":false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}'.format(activation_code, macaddress)
当我执行此代码时,它给了我这样的错误:
KeyError:'“错误”'
我做错了什么?
答案 0 :(得分:1)
您应该通过将它们加倍来转义大括号:
json_data_resp = '{{"error":false,"code":"{0}","mac":"{1}","message":"Device configured successfully"}}'.format(activation_code, macaddress)
格式字符串包含用花括号括起来的“替换字段”
{}
。大括号中不包含的所有内容均视为文字 文本,原样复制到输出中。如果您需要包括 文字文本中的大括号字符,可以通过加倍转义:{{
和}}
。
答案 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"})