繁体   English   中英

运行此代码时我在做什么错?

[英]What am i doing wrong while running this code?

首先,我绝不是编程专家,也不熟悉python,所以如果这是一个愚蠢的问题,请原谅我。 我正在尝试运行下面的代码,以将“ fasta”文件过滤为仅使用“ ID”文件所需的序列,但是每次运行它时,都会出现错误。 任何帮助是极大的赞赏!

"""
%prog file.fasta wanted_ids.txt
"""
from Bio import SeqIO
import sys

wanted = [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

仅当您在运行程序时未将预期数量的参数传递给程序时,才会发生所描述的异常。 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])]
#...

我希望它可以为您with open (sys.argv[2]) as file_: for line in file_:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM