Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用“时出现键错误”;如果在dict中;_Python_Xml_Dictionary_Key_Iteration - Fatal编程技术网

Python-使用“时出现键错误”;如果在dict中;

Python-使用“时出现键错误”;如果在dict中;,python,xml,dictionary,key,iteration,Python,Xml,Dictionary,Key,Iteration,在运行脚本解析XML文件内容时,我收到以下错误 if iteration.findtext("Iteration_query-def") in ecdict: KeyError: 'XLOC_000434' 我的印象是,使用“if in dict”意味着如果在字典中找不到键,脚本将继续执行if语句,并继续执行其余代码。下面是我正在使用的代码中有问题的部分。我意识到这是一个非常基本的问题,但我不确定我还能说些什么,我不明白为什么我会收到这个错误 import xml.etree.ElementT

在运行脚本解析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'
回溯(最近一次呼叫最后一次):
文件“2d.test.py”,第170行,在
p=“PvOAK\u up”+str(n)+“\t”+tranlen[iteration.findtext(“iteration\u query-def”)]+“\t”+“-”+“\t”+“\t”+“\t”+tairid+“\t”+tairdes+“\t”+goterms+“\t”+ecterms+“\t”+“+desc”\t”+str(flower[2])”+“+str格式:.str({0.2f}).格式(float(flower[query][0]))+“\t”+str({0.2f}).格式(float(leaf[query][2]))+“\t”+str({0.2f}).格式(float(leaf[query][1]))+“\t”+str格式(float(leaf[query][0]))
键错误:“XLOC_000434”

iteration.findtext(“iteration\u query-def”)
是否可以作为异常源?
中的
永远不会抛出
KeyError
;什么是完整的回溯?您确定用最新版本的代码重新启动Python吗?您是否尝试过使用ecdict.get(…等)而不是ecdict[…添加更多的代码是错误的方向--尝试用更少的代码重现问题会很有帮助。请看…回溯没有显示更多细节这一事实本身非常有帮助。它告诉我们问题不在findtext()调用内部,但更可能是findtext()的结果在tranlen中不存在。值得注意的是,这不是一个“if in dict”用法,使得这个问题的主题具有误导性。