如何在Python中显式检测生成器端?
我编写了一个生成器,它返回值的元组:如何在Python中显式检测生成器端?,python,generator,Python,Generator,我编写了一个生成器,它返回值的元组: import numpy as np def mygenerator(): data = np.arange(10) data = np.reshape(data, (-1, 2)) for row in data: yield row[0], row[1] generator = mygenerator() while True: a, b = generator.__next__() print
import numpy as np
def mygenerator():
data = np.arange(10)
data = np.reshape(data, (-1, 2))
for row in data:
yield row[0], row[1]
generator = mygenerator()
while True:
a, b = generator.__next__()
print("a: ", a, "b: ", b)
想在没有
的情况下使用它来。。。在
中。那么如何检测生成结束?当生成器耗尽时,它将抛出异常StopIteration
。您可以使用try
…except
语句捕获异常,并在异常发生时退出循环:
while True:
try:
a, b = next(generator)
except StopIteration:
break
print("a: ", a, "b: ", b)
顺便说一句,为什么不为循环设置?似乎:
for a, b in generator:
print("a: ", a, "b: ", b)
完全按照您的要求执行,没有繁琐的构造。对此进行了详细说明,并建议执行以下操作,生成器将耗尽,直到下一步()
返回无
:
import numpy as np
def mygenerator():
data = np.arange(10)
data = np.reshape(data, (-1, 2))
for row in data:
yield row[0], row[1]
generator = mygenerator()
a, b = next(generator, None)
while a and b:
print("a: ", a, "b: ", b)
a, b = next(generator, None)
只需继续在其上调用next
,并手动捕获StopIteration
?我知道这可能是一个恼人的问题,但为什么不能使用for循环呢?介意再给我们看一点代码,看看这是否真的不可能吗?我也有点惊讶,知道这个问题的答案可能是什么。这是Stackoverflow:如果你写复杂的例子,你让它简短,如果你写简短的例子,你让它使用适合这个简短例子的简单代码:)我不能用。。。在
中,因为在我的真实代码中,我使用复杂的返回值处理和切换不同的循环。。。