Python - 使用&#34时的关键错误;如果在dict"

时间:2014-06-09 17:08:59

标签: python xml dictionary key iteration

运行脚本来解析XML文件的内容时,我收到以下错误。

if iteration.findtext("Iteration_query-def") in ecdict:
KeyError: 'XLOC_000434'

我的印象是使用“if in dict”意味着如果在字典中找不到密钥,脚本将继续经过if语句并继续执行其余代码。下面是我正在使用的代码中有问题的部分。我知道这是一个非常基本的问题,但我不确定我还能说什么,我不明白为什么我收到这个错误。

import xml.etree.ElementTree as ET
tree = ET.parse('507.FINAL_14.2.14_2_nr.out_fmt5.out')
blast_iteration = tree.find("BlastOutput_iterations")
for iteration in blast_iteration.findall("Iteration"):
        query = iteration.findtext("Iteration_query-def").strip().strip("\n")
        if query in score:
                continue
        if iteration.findtext("Iteration_message") == "No hits found":
                if iteration.findtext("Iteration_query-def") in tair:
                        tairid = tair[iteration.findtext("Iteration_query-def")][0]
                        tairdes = tair[iteration.findtext("Iteration_query-def")][1]
                else:
                                        tairid = "-"
                                        tairdes = "-"
                goterms = ""
                ecterms = ""
                if iteration.findtext("Iteration_query-def") in godict:
                                        for x in godict[iteration.findtext("Iteration_query-def")][:-1]:
                                                goterms = goterms + x + ";"
                                        goterms = goterms + godict[iteration.findtext("Iteration_query-def")][-1]
                else:
                                        goterms = "-"
                if iteration.findtext("Iteration_query-def") in ecdict:
                                        for x in ecdict[iteration.findtext("Iteration_query-def")][:-1]:
                                                ecterms = ecterms + x + ";"
                                        ecterms = ecterms + ecdict[iteration.findtext("Iteration_query-def")][-1]
                else:
                                        ecterms = "-"
                if iteration.findtext("Iteration_query-def") in godescr:
                        desc = godescr[iteration.findtext("Iteration_query-def")]
                else:
                        desc = "-"
                n += 1
                p = "PvOAK_up"+str(n) + "\t" + tranlen[iteration.findtext("Iteration_query-def")] + "\t" + orflen[iteration.findtext("Iteration_query-def")] + "\t" + "-" + "\t" + "-" + "\t" + tairid  + "\t" + tairdes + "\t" + goterms + "\t" + ecterms + "\t" + desc + "\t" + str(flower[query][2]) + "\t" + str('{0:.2e}'.format(float(flower[query][1]))) + "\t" + str('{0:.2f}'.format(float(flower[query][0]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][2]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][1]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][0])))
                print p

希望你能提供帮助,

感谢。

编辑:我应该说以前创建了godict和ecdict如下 - 如果需要,我可以提交整个代码:

godict = {}
ecdict = {}
godescr = {}
f = open("507.FINAL_14.2.14_2_nr.out_fmt5.out.annot")
for line in f:
        line = line.split("\t")
        if len(line) > 2:
                godescr[line[0]] = line[2]
        line[1] = line[1].strip("\n")
        if line[1].startswith("EC"):
                if line[0] in ecdict:
                        a = ecdict[line[0]]
                        a.append(line[1])
                        ecdict[line[0]] = a
                else:
                        ecdict[line[0]] = [line[1]]
        else:
                if line[0] in godict:
                        a = godict[line[0]]
                        a.append(line[1])
                        godict[line[0]] = a
                else:
                        godict[line[0]] = [line[1]]

回溯:

Traceback (most recent call last):
  File "2d.test.py", line 170, in <module>
    p = "PvOAK_up"+str(n) + "\t" + tranlen[iteration.findtext("Iteration_query-def")] + "\t" + orflen[iteration.findtext("Iteration_query-def")] + "\t" + "-" + "\t" + "-" + "\t" + tairid  + "\t" + tairdes + "\t" + goterms + "\t" + ecterms + "\t" + desc + "\t" + str(flower[query][2]) + "\t" + str('{0:.2e}'.format(float(flower[query][1]))) + "\t" + str('{0:.2f}'.format(float(flower[query][0]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][2]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][1]))) + "\t" + str('{0:.2f}'.format(float(leaf[query][0])))
KeyError: 'XLOC_000434'

0 个答案:

没有答案