已使用Except KeyError时引发KeyError

时间:2019-04-05 07:10:17

标签: python python-2.7

当我使用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而崩溃。

1 个答案:

答案 0 :(得分:0)

当您将KeyErrorqID == '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'