有什么方法可以检测生成器的 __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/