如何在python中使用if else条件删除KeyError

时间:2016-11-28 15:28:17

标签: python-2.7

如果某个字符不在我的键列表中,例如“X”,我该如何避免它并继续而不对其执行任何操作?我得到KeyError'X',因为我正在查看我的序列中有一个X.

        keys = ["A", "C", "D", "E"]

        for char in keys:
            counts[char] = 0

        for line in gpcr: 
            if line.startswith(">"):
                line = line.replace(' ','')
                header = line.split()
                number = header[0].split('|')

                print "Id:",number[2]

                continue
                fo.write(number[2])
                fo.write('\n')              
            for char in line.strip(): 
                if char 
                counts[char] += 1               
            total = float(sum(counts.values()))

        toReturn = ''


        for key in keys:
            aa_per = (counts[key]/total)*100
            toReturn = toReturn + '%.2f'%aa_per + '%'+ '\t'
        fo.write(number[1])


        fo.write('\n')
        fo.write(''.join(str(x) for x in toReturn))
        fo.write('\n')

        print toReturn
fo.close()

2 个答案:

答案 0 :(得分:0)

如果您仍想计算此X字符的出现次数,可以使用defaultdict

from collections import defaultdict
counts = defaultdict(int)

计数将是字典的实例,而不是引发KeyError,如果该键不存在则返回0。这样您就可以完全避免字典初始化。

更新: 如果你想使用if-else,我认为它应该足够了:

for char in line.strip(): 
    if char in keys:
        counts[char] += 1    

答案 1 :(得分:0)

我对你的问题感到有些困惑。我想有问题的一行是

 aa_per = (counts[key]/total)*100

您可以使用KeyError块检查try

try:
    aa_per = (counts[key]/total)*100
except KeyError:
    aa_per = 0

我猜如果密钥没有出现,百分比应该是0。

通常try块是检查异常或警告的强大工具。另请参阅here https://docs.python.org/3/tutorial/errors.html