2017-12-02 22 views
0

UniProt 데이터베이스에서 FASTA 시퀀스에 액세스하려고 시도하고 있습니다. 이것은 현재 유니 코드 (UniProt) 코드를 올바르게 입력 할 때 작동합니다 (예 : P10079와 같이 6 자리 숫자의 문자열). 올바르지 않은 코드를 입력하면 프로그램이 다운됩니다. 나는 오류를 계속 받고 있지만 올바르게 입력 될 때까지 사용자가 다른 코드를 다시 입력 할 수 있도록 루프를 작성하려고 시도했습니다. 이것은 함수에서 이것을 사용하지 않았기 때문입니까? 건배잘못된 사용자 입력이 내 프로그램 충돌을 방지합니다.

#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 문 만 실행하는 것입니다. 따라서 첫 번째 입력이 유효하지 않거나 예외가 발생하지만 두 번째 입력이 발생하지 않으면 전체 else 블록을 건너 뜁니다.

여러 가지 가능성 중 하나는 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)