Python 超出生成器表达式处的最大递归深度

Python 超出生成器表达式处的最大递归深度,python,recursion,runtime-error,pypy,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

在生产中,我有如下代码:

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
极少数情况下(我估计每10万次运行中就有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
文件“module.py”,主目录第12行
loaded=sum(如果value.is\u加载,则d.itervalues()中的值为1)
文件“module.py”,第12行,在
loaded=sum(如果value.is\u加载,则d.itervalues()中的值为1)
运行时错误:超过最大递归深度
问题:为什么会发生这种情况,如何复制和调试?显然,我可以用一个简单的循环重写
sum()
,但是错误很有趣


仅供参考:服务器运行CentOS 7.2.1511、x64、PyPy 5.1.1(与Python 2.7.10匹配),.

不确定此问题与PyPy跟踪器上报告的问题的关系,因为该问题没有类似递归的代码,你可能想在那里报告,专门研究这个软件的人可以在那里看一看。@metatoaster我确实应该这样做。在研究错误时未发现该问题。是否尝试比5.1.1更新版本的PyPy?我们至少修复了一个可能相关的问题。@ArminRigo 5.3.1已经足够好了(它在我们的应用程序中的性能稍差,我们还没有更新)?你是说@metatoaster提到的“切片记忆视图失败”问题吗?在任何情况下,在生产环境中部署都需要时间,而且这种错误在几天内只发生一次。所以我不会很快更新:)我正在考虑2009年7月的660e49cca2a1,所以不,这只是PyPy5.4中的版本。