从循环中的序列中获取下一组字母
Getting the next set of letters from a sequence in a loop
我正在开发一个从序列中识别 ORF 的程序。当程序应该分析序列中的密码子时,我似乎遇到了一个错误。
我的代码是:
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):
如果出于某种原因您想继续手动执行此操作,则需要使用 try/except
:
包装 next()
调用
try:
i, index = next(codon_frame)
except StopIteration:
break
替换:
codon_frame = self.codon(frame)
while True:
i, index = next(codon_frame)
与:
for i, index in self.codon(frame):
我正在开发一个从序列中识别 ORF 的程序。当程序应该分析序列中的密码子时,我似乎遇到了一个错误。 我的代码是:
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):
如果出于某种原因您想继续手动执行此操作,则需要使用 try/except
:
next()
调用
try:
i, index = next(codon_frame)
except StopIteration:
break
替换:
codon_frame = self.codon(frame)
while True:
i, index = next(codon_frame)
与:
for i, index in self.codon(frame):