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

标签 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.")

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

最佳答案

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

要么从迭代器返回一些可用于“重试”的内容,要么在迭代器逻辑内处理重试(在您的情况下,这将在 process_hit()new_nongeneric_search. scan() 取决于您在哪一步超时)。

关于python - 如何在异常后重试迭代器 next(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907567/

相关文章:

.net - 如何使用生成器遍历树结构?

python - 如何在 Python 中将文本文件的每两行合并为一个字符串?

python - Pymongo forEach 格式化

python - 是否可以对迭代器求和?

c++ - 使用 C++ 11 在二叉树(或任意树)上实现迭代器

c++ - 为什么 string::find 返回 size_type 而不是迭代器?

python - 使用 Python 解析 XML 时处理多个节点

python - 如何修改ttk Combobox字体?

python - 模拟 urllib.request.urlopen 的 read 函数返回 MagicMock 签名

java - arraylist并发修改