生成器表达式超出了最大递归深度

时间:2016-10-09 08:05:24

标签: python recursion runtime-error pypy

在制作中我有以下代码:

class Data(object):
    def __init__(self, data=None):
        self._data = data

    @property
    def is_loaded(self):
        return self._data is not None


def main():
    d = {0: Data(), 1: Data(1)}
    loaded = sum(1 for value in d.itervalues() if value.is_loaded)  # RuntimeError
    print loaded

非常罕见 - 我估计10K中有1次运行 - 这在sum()失败了;如果使用相同的输入再次运行,则错误不会重现:

File "module.py", line 12, in main
  loaded = sum(1 for value in d.itervalues() if value.is_loaded)
File "module.py", line 12, in <genexpr>
  loaded = sum(1 for value in d.itervalues() if value.is_loaded)
RuntimeError: maximum recursion depth exceeded

问题:为什么会发生这种情况,如何重现和调试?很明显,我可以用一个简单的循环重写sum(),但错误是有趣的......

供参考:服务器运行CentOS 7.2.1511,x64,PyPy 5.1.1(匹配Python 2.7.10),portable build

0 个答案:

没有答案