【发布时间】:2021-12-21 09:19:32
【问题描述】:
我有一个方法想要重复调用以进行迭代,完成后会引发StopIteration(在这种情况下,pyarrow.csv.CSVStreamingReader 的实例会循环一个大文件)。我可以在这样的 for 循环中使用它:
def batch_generator():
while True:
try:
yield reader.read_next_batch()
except StopIteration:
return
for batch in batch_generator():
writer.write_table(batch)
可以使用用户定义的函数以通用方式完成:
def make_generator(f):
def gen():
while True:
try:
yield f()
except StopIteration:
return
return gen()
for batch in make_generator(reader.read_next_batch):
writer.write_table(batch)
...但我想知道这样的事情是否可以通过标准库函数或一些晦涩的语法来实现?
【问题讨论】:
-
while True: writer.write_table(reader.read_next_batch())有什么问题? -
你必须手动捕捉
StopIteration -
什么
StopIteration?read_next_batch()不是返回值的函数吗?如果您有StopIteration,那么您的问题就解决了 - 只需使用for循环... -
你是对的,我错过了 Chronial 的回答中的
iter电话。