首先,我絕不是編程專家,也不精通python,如果這是一個愚蠢的問題,請原諒我。我正在嘗試運行下面的代碼,以使用“ID”文件將 fasta 文件過濾到我想要的序列,但每次運行它時,都會出現錯誤。任何幫助是極大的贊賞!"""%prog file.fasta wanted_ids.txt"""from Bio import SeqIOimport syswanted = [line.strip() for line in open(sys.argv[2])]seqiter = SeqIO.parse(open(sys.argv[1]), 'fasta')SeqIO.write((seq for seq in seqiter if seq.id in wanted), sys.stdout, "fasta")這是我得到的錯誤:File "filter.py", line 7, in <module> wanted = [line.strip() for line in open(sys.argv[2])]IndexError: list index out of range
2 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
只有在運行程序時沒有將預期數量的參數傳遞給程序時,才會發生您描述的異常。該sys.argv變量包含程序的參數。它將是一個列表,并且sys.argv[0]將具有腳本本身的文件名,而后面的值將是后面傳入的參數。
您的程序的文檔字符串 ( %prog file.fasta wanted_ids.txt) 表明您需要將兩個參數傳遞給程序,一個是.fasta文件,另一個是.txt文件。您忽略了其中一個或兩個參數,因此程序無法執行查找sys.argv[2], 并引發IndexError.
你可能想在你的程序中添加代碼來檢查參數的數量,并在你得到錯誤的數字時給出一個更有幫助的異常:
from Bio import SeqIO
import sys
if len(sys.argv) != 3:
sys.exit("Bad arguments! Usage: {} <file.fasta> <wanted_ids.txt>".format(sys.argv[0]))
wanted = [line.strip() for line in open(sys.argv[2])]
#...
添加回答
舉報
0/150
提交
取消