定义字符串时出现Key Error,Python

1 投票
3 回答
2534 浏览
提问于 2025-04-18 12:04

我遇到了一个错误:“键错误:'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_np_n分别是"Welcome""123",你会得到类似下面的结果。

{name:countryWelcome,provinces:[{$ref : Province,$id :   province123}]}

撰写回答