我正在研究一种从序列中识别ORF的程序。当程序应该从序列中分析密码子时,我似乎seem绊绊。
我的代码是:

def __init__(self,sequence):
    self.sequence = Seq(sequence)
    self.reverse = self.sequence.reverse_complement()
    self.sequence = str(self.sequence)
    self.stopcodons = ["TAG", "TAA", "TGA"]
    self.start = 'ATG'
    self.length = 0
    self.result = ("+",0,0,0,0)

def codon(self,frame):
    start = frame
    while start +3 <=len(self.sequence):
        yield (self.sequence[start:start+3],start)
        start += 3
    #print (start)

def direction(self):
    direction = "+"
    for frame in range(3):
      self.ORF(frame, direction)
    direction = "-"
    for frame in range(3):
        self.sequence = self.reverse
        self.ORF(frame, direction)
    SeqAnalyzer.results()

def ORF(self, frame, direction):
    orf_beg = 0
    codon_frame = self.codon(frame)
    while True:
        i, index = next(codon_frame)
        if i in self.start or not self.start and i not in self.stopcodons:
            orf_beg = index + 1
        elif i in self.stopcodons:
            orf_ending = index + 3
            length = (orf_ending - orf_beg) + 1
            if length > self.length:
                self.length = length
                self.result = (direction, frame, orf_beg, orf_ending, length)
                print(self.result)
            break
def results(self):
    print("'{}{:+d} {:>5d}..{:>5d} {:>5d}'" .format(self.result))


运行它时,出现以下错误:

File "C:/Users/Alex/OneDrive/Python/Lab 5/findORFs.py", line 33, in direction

self.ORF(frame, direction)
File "C:/Users/Alex/OneDrive/Python/Lab 5/findORFs.py", line 44, in ORF

i, index = next(codon_frame)
StopIteration


问题似乎来自我的Next(codon_frame),但不知道我将如何解决该问题。

最佳答案

代替

codon_frame = self.codon(frame)
while True:
    i, index = next(codon_frame)`


您可能应该这样做:

for i, index in self.codon(frame):


如果出于某种原因想要继续手动进行操作,则需要用next()包装try/except调用:

try:
    i, index = next(codon_frame)
except StopIteration:
    break

关于python - 从循环序列中获取下一组字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33683387/

10-11 20:23