定义字符串时出现Key Error,Python
我遇到了一个错误:“键错误:'name'”。
有没有人能告诉我下面这段代码有什么问题:
import random
def mongoCountry(countryNum, provinceNum):
"""generate some test data"""
f = open("F:\\univData\\country-mongo.json", mode = 'w')
text = ""
for c_n in range(0, countryNum):
for p_n in range(0, provinceNum):
text += "{name:country{0},provinces:[{$ref : Province,$id : province{1}}]}\n".format(c_n, p_n)
f.write(text)
f.close()
mongoCountry(2, 10)
我在网上查过,知道这个问题和字典(dict)对象有关。但我在那里面找不到这样的对象。
3 个回答
1
你在字符串的开头用了 {name:
,所以 format
需要把 name
当作一个关键字。
请在 name
前面加上转义符 {
。
https://docs.python.org/2/library/string.html#format-examples
1
str.format
方法把整个字符串当作一个格式字段来处理,因为它是以 {name:
开头,并以 }
结尾的。下面是一个更简单的字符串示例:
>>> '{a:{0}}'.format(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
>>>
要解决这个问题,你可以使用旧的 %
格式化 方法:
text += "{name:country%i,provinces:[{$ref : Province,$id : province%i}]}\n" % (c_n, p_n)
1
如果我理解你的程序没错的话,你是想创建一个JSON对象。正如iCodez在他的回答中提到的,Python的format
函数会把整个字符串当作格式字符串(或者说模板字符串,如果你喜欢这样称呼)。为了改变这种情况,你可以像这样对格式字符串进行转义。
"{{name:country{0},provinces:[{{$ref : Province,$id : province{1}}}]}}\n".format(c_n, p_n)
如果c_n
和p_n
分别是"Welcome"
和"123"
,你会得到类似下面的结果。
{name:countryWelcome,provinces:[{$ref : Province,$id : province123}]}