2016-11-28 3 views
-2

キーリストにない文字(「X」など)がある場合は、それを避けて何もしないで続行するにはどうすればよいですか?私はKeyError 'X'を得ています。私が見ているシーケンスにXがあるからです。Pythonでelse conditionを使用してKeyErrorを削除する方法

 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。こうすることで、辞書の初期化を完全に避けることができます。

更新: あなたがあれば、他の使用したい場合、私はそれを行うのに十分であるべきだと思う:

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

ありがとうございます。しかし、もし私がif-elseコンディショニングを使いたいのであれば、どうしたらこのエラーを避けることができますか? – KBnd

+0

答えを更新しました。私はコードをチェックしていないが、これで十分だと思う。 – dyeray

0

私は少しあなたの質問で混乱しています。私はキーが発生しない場合の割合は、ここで0でなければなりません推測

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

:私はあなたがtryブロックを使用することによりKeyErrorを確認することができ、問題の行が

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

だと思います。

一般に、tryブロックは、例外や警告をチェックするための強力なツールです。また、herehttps://docs.python.org/3/tutorial/errors.html

関連する問題