2017-12-02 6 views
0

UniProtデータベースからFASTAシーケンスにアクセスしようとしています。現在、UniProtコードを正しく入力すると(6桁の文字列、たとえばP10079など)、誤って入力するとプログラムがクラッシュします。私はまだエラーが発生していますが、正しく入力されるまで、ユーザーが別のコードを再入力できるようにループを作成しようとしました。私はこれを関数で使わなかったのでこれは? 乾杯誤ったユーザー入力がプログラムをクラッシュさせないようにする

#Get User Input and access data from UniProt 
user_input = input ("Type in your protein accession code: ") 
try: 
    handle = ExPASy.get_sprot_raw(user_input) 
except HTTPError as e: 
    user_input = input("Invalid UniProt Accession Code\nPlease enter another code:") 
else: 
    record = SwissProt.read(handle) 
    handle.close() 
    print("Searching UniProt... \nFinding Sequence... \nChecking for matches...") 
    print (record.description) 
    sequence = record.sequence 
    print ("Your Fasta Sequence is: ", sequence) 

答えて

0

問題も例外が発生しなければ、あなたのelse文が唯一実行するということです。したがって、第1の入力が無効である場合、すなわち第2の入力ではなく例外が生じた場合、elseブロック全体がスキップされる。

複数の可能性のうちの1つは、すべてをループに入れて、get_sprot_rawが成功してからシーケンス情報を取得するまで実行されることです。

from Bio import ExPASy 
from Bio import SwissProt 
from urllib.error import HTTPError 

while True: 
    user_input = input ("Type in your protein accession code: ") 
    try: 
     handle = ExPASy.get_sprot_raw(user_input) 
    except HTTPError as e: 
     print("Invalid UniProt Accession Code\nPlease enter another code:") 
    else: 
     break 

record = SwissProt.read(handle) 
handle.close() 
print("Searching UniProt... \nFinding Sequence... \nChecking for matches...") 
print (record.description) 
sequence = record.sequence 
print ("Your Fasta Sequence is: ", sequence) 
関連する問題