【发布时间】:2013-01-09 20:42:24
【问题描述】:
我在处理列表时遇到了错误RuntimeError: maximum recursion depth exceeded in cmp。更准确地说,p0 in points、points.index(p0) 方法调用以及points 列表上的points.remove(p0) 方法调用一直在我的points 列表的特定索引处引发特定字典p0 的错误. pointslist 在发生错误时包含 4700 个字典,从 12000 个对象的列表中减少一个字典,直到引发错误。 p0 字典包含对列表中另一个字典的引用,该字典返回包含对 p0 对象的引用。 p0 字典以及它包含引用的字典在三个方法调用中的任何一个引发错误之前会在 points 列表中出现两次。
这个错误是从哪里来的?
编辑:这是引发错误的代码。
for roadType in roadTypes:
points = roadPoints[roadType][:]
while len(roadTails[roadType]) > 0:
p0 = roadTails[roadType].pop()
p1 = p0['next']
points.remove(p0) # Where the error occurs
points.remove(p1)
while True:
p2 = find(p1, points, 0.01)
if p2:
points.remove(p2)
p3 = p2['next']
points.remove(p3)
if p3 in roadTails[roadType]:
roadTails[roadType].remove(p3)
break
else:
p0, p1 = p2, p3
continue
else: break
这是find的定义,dist计算两点之间的距离。
def find(p1, points, tolerance = 0.01):
for p2 in points:
if dist(p2['coords'], p1['coords']) <= tolerance:
return p2
return False
这是错误的完整回溯:
Traceback (most recent call last):
File "app.py", line 314, in <module>
points.remove(p0) # Where the error occurs
RuntimeError: maximum recursion depth exceeded in cmp
【问题讨论】:
-
你能给我们看一些代码吗?
-
p0 只是一个普通的旧 python 字典?
-
我仍然没有看到任何递归。向我们展示更多代码!
find来自哪里? -
p0是一个字典(使用{}创建)。我刚刚添加了find的定义。据我了解递归的概念,我的代码中没有任何递归。 -
@Eric:错误似乎是由列表对象的本机方法引发的。回溯只显示一个级别。