gpt4 book ai didi

python - 检测生成器的 __iter__ 是否被 list() 调用

转载 作者:行者123 更新时间:2023-11-28 21:28:07 25 4
gpt4 key购买 nike

有什么方法可以检测生成器的 __iter__ 是否被 list() 调用?据我了解,list(obj) 将调用 __iter__;但是,在无限生成器的情况下,我希望它返回一个错误。

例如,我有以下生成器:

def gen():
while 1:
yield 1

因为调用 list(gen) 会导致无限循环,所以我想让它返回一个错误。有办法做到这一点吗?

最佳答案

没有明智的方法可以做到这一点。您也许能够劫持堆栈跟踪,但它会很丑陋且容易出错。

(显然,您要尝试做的不是期望可迭代对象在 Python 中的行为方式,这是不这样做的另一个很好的理由。)

此外,它不会永远循环,而是不断尝试为列表分配内存。一旦失败,将抛出 MemoryError 并且解释器可能恢复也可能不恢复。

关于python - 检测生成器的 __iter__ 是否被 list() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com