首先,我绝不是编程专家,也不精通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条经验 获得超12个赞
只有在运行程序时没有将预期数量的参数传递给程序时,才会发生您描述的异常。该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
提交
取消