奇怪的python密钥错误

时间:2012-04-03 06:16:57

标签: python

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    ClosestCommonAncestor("A","C",x)
  File "C:\x\x.py", line 149, in ClosestCommonAncestor
    b = tree[otu2][0]
KeyError: ('ADBFGC', 14.5)

这是返回错误的函数。

def ClosestCommonAncestor32 (otu1,otu2,tree):
    while True:
        a = tree[otu1][0][0]
        while True:
           b = tree[otu2][0]
            if a == b:
                return a
            otu2 = b
        otu1 = a

这是树输入

{'A': [('AD', 4.0), None, None], 'C': [('ADBFGC', 14.5), None, None], 'B': [('BF', 0.5), None, None], 'E': [('ADBFGCE', 17.0), None, None], 'D': [('AD', 4.0), None, None], 'G': [('BFG', 6.25), None, None], 'F': [('BF', 0.5), None, None], 'ADBFG': [('ADBFGC', 6.25), ('AD', 4.25), ('BFG', 2.0)], 'BF': [('BFG', 5.75), ('B', 0.5), ('F', 0.5)], 'ADBFGC': [('ADBFGCE', 2.5), ('ADBFG', 6.25), ('C', 14.5)], 'ADBFGCE': [None, ('ADBFGC', 2.5), ('E', 17.0)], 'BFG': [('ADBFG', 2.0), ('BF', 5.75), ('G', 6.25)], 'AD': [('ADBFG', 4.25), ('A', 4.0), ('D', 4.0)]}

我不明白这一点,我以为Keyerror在请求一个不存在的密钥时? 感谢

2 个答案:

答案 0 :(得分:4)

  

我认为Keyerror是在它请求一个不存在的密钥的时候?

没错。

但是,词典中没有键('ADBFGC', 14.5)。元组确实存在于其中一个值列表中,但它不是关键字。字典的键是'A''C''ADBFGC'等。

要只使用元组的第一个元素索引到字典中,请写tree[otu2[0]]

答案 1 :(得分:1)

因此,不知怎的,您正在设置otu2 = ('ADBFGC', 14.5),并且可能尝试使用它来索引到需要整数的列表。