当我使用Python程序Cupcake ToFU(在https://github.com/Magdoll/cDNA_Cupcake/blob/master/cupcake/io/BioReaders.py上可获得完整的源代码)时遇到了这个问题。
程序不断引发KeyError并崩溃了。当我查看代码时,我看到脚本使用了“ KeyError除外”来避免程序崩溃,但是当我尝试运行它时,KeyError程序仍然崩溃了。有谁可以帮助我吗?
这是错误消息
File "/Users/wuyibo/anaconda2/lib/python2.7/site-packages/cupcake-6.8-py2.7-macosx-10.6-x86_64.egg/cupcake/io/BioReaders.py", line 516, in process
self.qLen = query_len_dict[self.qID]
KeyError: 'c2468/f1p1/3565'
这是从507行到518行的代码:
if query_len_dict is not None: # over write qLen and qCoverage, should be done LAST
try:
self.qLen = query_len_dict[self.qID]
except KeyError: # HACK for blasr's extended qID
k = self.qID.rfind('/')
if k >= 0:
try:
self.qLen = query_len_dict[self.qID[:self.qID.rfind('/')]]
except KeyError:
self.qLen = query_len_dict[self.qID]
else:
raise Exception, "Unable to find qID {0} in the input fasta/fastq!".format(self.qID)
使用“ KeyError除外”,该程序不应崩溃,但是当我运行它时,它仍然因KeyError而崩溃。
答案 0 :(得分:0)
当您将KeyError
与qID == 'c2468/f1p1/3565'
一起使用时,它将进入except块。
然后在try块中(第514行),它得到新的KeyError
,然后在except块中,尝试执行最初将它带到此处的操作(因为self.qID从未更改)(即,第516行是与509行相同。
>>> 'c2468/f1p1/3565'[:'c2468/f1p1/3565'.rfind('/')]
'c2468/f1p1'
query_len_dict
是否可以拥有密钥'c2468/f1p1'
?