为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2022-01-18 13:33:10
首先,我绝不是编程专家,也不精通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 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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


查看完整回答
反对 回复 2022-01-18
?
红颜莎娜

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])]

#...


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信