字典键错误中的Python对象

时间:2013-09-26 03:32:23

标签: python dictionary

我试图用Python写一个国际象棋“瑞士”锦标赛经理。我有两个类,一个匹配类和一个玩家类。我还有两个词典,name_object,它将一个字符串名称绑定到一个对象,以及name_score,它将Player对象的名称绑定到Player对象的得分(1.0,2.5等)。

变量示例

    name_object = {'Jim' : Object, 'Jack' : Object}
    name_score = {'Jim': 2.5, 'Jack' : 1.0}

我的课程

class Player:
    def __init__(self, name, gender, rating, score):
    self.name = name
    self.gender = gender
    self.rating = rating
    self.score = score

class Match:
    def __init__(self, white, black):
        self.white = white
        self.black = black

    def Result(self, res):
        global name_object, name_score
        complete = False
        if res == 1:
            if complete == False:
                name_object[self.white].score += 1
                name_score[self.white] += 1
                complete = True
        elif res == 0:
            if complete == False:
                name_object[self.black].score += 1
                name_score[self.black].score += 1
                complete = True
        elif res == 'd':
            if complete == False:
                name_object[self.white].score += .5
                name_score[self.white] += .5
                name_object[self.black].score += .5
                name_score[self.black].score += .5

但是当我尝试创建一个具有'Jim'和'Jack'两个玩家名称的对象时,

    Match1 = Match(name_object['Jim'], name_object['Jack'])

然后尝试使用白色获胜调用Result方法,

    Match1.Result(1)

我收到此错误,

    line 43, in Result
    name_object[self.white].score += 1
    KeyError: <__main__.Player object at 0x02AB6DF0>

非常感谢所有帮助

2 个答案:

答案 0 :(得分:1)

self.white设置为name_object['Jim'],因此当您执行name_object[self.white]时,您实际上正在搜索dict,如

name_object[name_object['Jim']]

我非常怀疑这是有道理的。您可能需要考虑将'Jim'单独传递到self.white,然后在其余代码中使用name_object[self.white]

答案 1 :(得分:0)

通过眼球,您的name_object dict包含密钥字符串('Jim''Jack')。但是你的

name_object[self.white].score += 1

行(Python抱怨的那个)没有使用字符串来索引name_object。它正在使用name_object['Jim'](这是代码中未定义的代码Object)来索引该字典。这就是你获得KeyError的原因:你试图使用不在dict中的密钥来索引dict。

你如何解决这个问题取决于你。我无法猜测你是否想要使用Player的字符串或实例来索引你的字典。