【问题标题】:Preventing incorrect User Input from crashing my program防止不正确的用户输入使我的程序崩溃
【发布时间】:2017-12-02 13:03:52
【问题描述】:

我正在尝试从 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)

【问题讨论】:

    标签: python loops input biopython http-error


    【解决方案1】:

    问题是你的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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-26
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      相关资源
      最近更新 更多