字典中的Python对象键错误

字典中的Python对象键错误,python,dictionary,Python,Dictionary,我正在尝试用Python编写一个国际象棋“瑞士”锦标赛管理器。我有两门课,一门比赛课和一门球员课。我还有两个字典,name_object,它将字符串名称绑定到对象,name_score,它将播放器对象的名称绑定到播放器对象的分数(1.0、2.5等) 变量示例 name_object = {'Jim' : Object, 'Jack' : Object} name_score = {'Jim': 2.5, 'Jack' : 1.0} 我的课 class Player: d

我正在尝试用Python编写一个国际象棋“瑞士”锦标赛管理器。我有两门课,一门比赛课和一门球员课。我还有两个字典,name_object,它将字符串名称绑定到对象,name_score,它将播放器对象的名称绑定到播放器对象的分数(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'])
然后尝试调用带有white winning的Result方法

    Match1.Result(1)
我得到这个错误

    line 43, in Result
    name_object[self.white].score += 1
    KeyError: <__main__.Player object at 0x02AB6DF0>
第43行,在结果中
名称\对象[self.white]。分数+=1
关键错误:

非常感谢所有帮助

self.white
设置为
name\u object['Jim']
,因此当您执行
name\u object[self.white]
操作时,实际上是在搜索dict-like

name_object[name_object['Jim']]

我非常怀疑这是否有道理。您可能需要考虑在代码< >代码> Goo>白> <代码>中,然后在代码的其余部分中使用<代码> NAMEXObj[Out.White ] < /代码>。

< P>由眼球,您的代码> NAMEI对象< /代码> DICT具有键的字符串(<代码> 'JIM' 和<代码> JACK < /代码>)。但是你的

name_object[self.white].score += 1
第行(Python抱怨的一行)没有使用字符串索引
name\u对象
。它使用
name\u object['Jim']
(这是您显示的
object
)中未定义的代码来索引该dict。这就是为什么您会得到
KeyError
:您试图使用一个不在dict中的键来索引该dict


如何修复它取决于你自己。我猜不出你是使用字符串还是
Player
的实例来索引你的指令。

为什么你需要/想要全局?全局是不知道更好的指示符。因为我需要在其他函数中使用name\u object和name\u score在这种情况下:你使用pdb来找出对象包含哪些名称作为键和键将其与您试图用来访问dict的键进行比较。无需将模块级dict定义为全局dict。代码中的哪一点是self.white设置为name_object['Jim'],是在name_object[self.white]时执行的。分数+=1执行
匹配时返回(name_object['Jim'],name_object['Jack']))
然后
self.white=white
。嘿,过了一会儿,我解决了这个问题。你的回答很有帮助,让我进一步完善了我的计划。非常感谢,约翰尼。