TypeError:列表索引必须是整数或切片,而不是BioPython中的str

问题描述

以下代码导致此错误:

Traceback (most recent call last):
  File "/t.py",line 19,in <module>
    seqsInfo[record.id] = SeqInfo(len(record),record.seq[0])
TypeError: list indices must be integers or slices,not str
from Bio import SeqIO

class SeqInfo():

    def __init__(self,length,seqStart):
        self.length = length
        self.seqStart = seqStart

seqsInfo=[]
for record in SeqIO.parse("data/hybrid.AA.fasta","fasta"):
    seqsInfo[record.id] = SeqInfo(len(record),record.seq[0])

这是输入文件:

>STRG2.t1 gene=STRG2 seq_id=NbV1Ch01 type=cds
PYKTCHKKFRNKMPSFYLASFCIMVLSFSITFASGNSVSNKTCIDDATIVLSFGLYQNSC
LEAEAIIYSWVERAVSQDPRMAASLLRLHFHDCFVNGCDASVLLDDTPNFIGEKTAAPNL
NSLRGFEVIDSIKADLELACPQTVSCADILAIAARDSVVLSGGWRWKVQMGRKDSLTAST
KAVNNNIPGPNSNIATLVSSFQNIGLSLQDMVTLSGAHTIGSARCSTFSSRLNGGGNSDM
NLDFLQSLQQLCSVSDTNITLANLDDMTPSTFDNQYYVNLLSGKGLLVSDQVLASGDDNT
REIVQTYVDDPSAFFDDFRNSMLKMGSLAPPTGTTGEIRVNCRV

我想念什么?

解决方法

由于您试图将非整数作为索引分配给列表,因此会出现此类错误。请将列表更改为dict,因为record.id为'STRG2.t1'。希望这可以解决问题:

from Bio import SeqIO

class SeqInfo():

    def __init__(self,length,seqStart):
        self.length = length
        self.seqStart = seqStart

seqsInfo={}
for record in SeqIO.parse("data/hybrid.fasta","fasta"):
    seqsInfo[record.id] = SeqInfo(len(record),record.seq[0])
print(seqsInfo)

输出: {'STRG2.t1': .SeqInfo对象,位于0x1178b3710>}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...