异常后如何重试迭代器next()

时间:2019-07-05 18:05:35

标签: python iterator

我有一个迭代器,有时会给我一个套接字超时,并且我想知道如何重试套接字超时,而不是直接跳到迭代器中的下一项。

使用以下方法创建迭代器: iterator = pool.imap(process_hit, new_nongeneric_search.scan()) 因此,我在Elasticsearch查询(process_hit)的每个项目上调用一个函数(new_nongeneric_search.scan())。目前,当我遇到超时时,我只是捕捉到异常并继续调用next(it)

这是我目前的方法:

while True:
    try:
        next(it)
    except StopIteration:
        logging.info("No more results to process.")
        return
    except socket.timeout:
        logging.warning("Encountered timeout.")

如果我通过手动重新运行脚本多次重试同一项目,则超时将自行解决,因此我希望能够以编程方式重试有问题的项目,而不仅仅是多次重复搜索。

1 个答案:

答案 0 :(得分:2)

您的迭代器不返回任何内容,并且迭代器接口不支持“返回”,因此您无法在给出的代码中“重试”。

从迭代器返回可用于“重试”的内容,或者在迭代器的逻辑内处理重试(在您的情况下,这将在process_hit()new_nongeneric_search.scan()内部,具体取决于您执行的步骤超时)。