我有这段代码,它没有用,我不知道为什么。
我的数据结构:
最后,“parent”是Transcript(字符串)的ID。 我需要获取与字符串“parent”具有相同ID的Transcript实例(ptrans)。 它位于一个Gene实例中。
当我在底部运行代码时,我没有得到一个真正的异常,而是一个“StopIteration”,我以为我会抓住它,之后它应该继续使用下一个Gene对象,对吧?:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
ptrans = next(t for t in g.transcripts.values() if t.ID == parent)
StopIteration
我可以使用嵌套的for循环来完成它,但我可能也会这样做。我无法理解这不起作用的事实。谁能解释为什么,或者它如何起作用?
# iterate over Gene-dict
for g in genes.values():
#Iterate over Transcripts in 1 Gene
try:
ptrans = next(t for t in g.transcripts.values() if t.ID == parent)
#If no match, continue
except StopIteration:
continue
if ptrans:
break
答案 0 :(得分:2)
您的代码
ptrans = next(t for t in g.transcripts.values() if t.ID == parent)
几乎可以肯定没有按照你的想法行事。我怀疑g.transcript.values()
中没有项目将父项作为其ID,因为在空发生器上调用next()
确实会引发StopIteration
错误。
然而,next()
函数在任何情况下都只会调用一次,这意味着即使是有效值,也只会返回第一个。嵌套循环是一种更简单的方法来实现您的目标。