Je suis en train d'écrire un programme qui prend en entrée d'un fichier et chaque ligne peut contenir des « ATG » ou « GTG » et je suis assez sûr que je l'ai fait tout droit dans la mesure ce que j'essaie de faire. C'est la première fois que j'utilise un générateur en python et après avoir fait des recherches sur ce problème, je ne sais toujours pas pourquoi j'arrête l'itération. Pour cela, mon générateur doit générer un tuple avec les emplacements de départ pour ATG ou GTG trouvés dans chaque chaîne.Je ne sais pas pourquoi je reçois erreur StopIteration
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
C'est le générateur
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))
Ceci est l'erreur:
Traceback (most recent call last):
File "p3rmb.py", line 12, in <module>
slocs = gen.send(seq)
StopIteration
est-il un retraçage imprimé montrant chaque ligne? – JacobIRR
Traceback (dernier appel en dernier): Fichier "p3rmb.py", ligne 12, en slocs = gen.send (seq) StopIteration –
Si vous appelez 'send', vous devez affecter' yield' à une valeur. –