2016-11-28 67 views
-2

如果有一個字符不在我的密鑰列表中,比如「X」,我該如何避免它並繼續而不做任何事情?我得到KeyError'X',因爲我正在查看的序列中有一個X.如何在Python中刪除KeyError if 0123其他條件

 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() 
+0

請重新表述您的問題,以便我們理解它。 – Psytho

+0

將你的代碼變成一個函數,然後用'try'&'except'來解決這個錯誤。除非我誤解了這個問題? –

+0

我有一個序列,我正在做計數。序列是這樣的「AAAACCCDEAAAAX」 有一個「X」,我想避免計數。但與我的代碼我得到「KeyError:'X'」 – KBnd

回答

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  
+0

謝謝。但我在想,如果我想使用if-else條件,我該如何避免這個錯誤? – KBnd

+0

我更新了我的答案。我沒有檢查代碼,但我認爲這應該足夠了。 – dyeray

0

我稍微您的問題混淆。我想問題的行是

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

您可以通過使用try塊檢查一個KeyError

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

我想,如果該鍵不出現比例應爲0這裏。

一般而言try塊是檢查異常或警告的強大工具。請參閱herehttps://docs.python.org/3/tutorial/errors.html