我正在研究一种从序列中识别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/