gpt4 book ai didi

python - 不知道为什么我会收到 StopIteration 错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:54 31 4
gpt4 key购买 nike

我正在编写一个从文件接收输入的程序,每一行都可能包含“ATG”或“GTG”,我很确定我所做的一切都是我想做的。这是我第一次在 python 中使用生成器,在研究了这个问题之后,我仍然不知道为什么我会停止迭代。为此,我的生成器必须生成一个元组,其中包含在每个字符串中找到的 ATG 或 GTG 的起始位置。

import sys

import p3mod


gen = p3mod.find_start_positions()
gen.send(None) # prime the generator

with open(sys.argv[1]) as f:
for line in f:
(seqid,seq) = line.strip().lower().split()
slocs = gen.send(seq)
print(seqid,slocs,"\n")

gen.close() ## added to be more official

这是生成器

def find_start_positions (DNAstr = ""):

DNAstr = DNAstr.upper()

retVal = ()
x = 0
loc = -1

locations = []

while (x + 3) < len(DNAstr):

if (DNAst[x:x+3] is "ATG" or DNAstr[x:x+3] is "GTG" ):
loc = x

if loc is not -1:
locations.append(loc)

loc = -1

yield (tuple(locations))

这是错误:

Traceback (most recent call last):
File "p3rmb.py", line 12, in <module>
slocs = gen.send(seq)
StopIteration

最佳答案

您制作了一个一次性返回所有数据的生成器。您应该在每次迭代中产生数据。此代码可能并不完美,但它可能会解决您的部分问题:

def find_start_positions (DNAstr = ""):
DNAstr = DNAstr.upper()

x = 0
loc = -1

while x + 3 < len(DNAstr):
if DNAst[x:x+3] == "ATG" or DNAstr[x:x+3] == "GTG" :
loc = x

if loc is not -1:
yield loc

loc = -1

StopIteration 不是错误。这是生成器发出信号表明它耗尽了所有数据的方式。您只需要“尝试除外”它或在已经为您执行此操作的 forloop 中使用您的生成器。尽管它们并没有那么复杂,但可能需要一些时间来适应这些“奇怪”的错误。 ;)

关于python - 不知道为什么我会收到 StopIteration 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664539/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com