我在RuntimeError: maximum recursion depth exceeded in cmp使用列表时遇到了错误。更准确地说,列表上p0 in points的points.index(p0)方法调用和points.remove(p0)方法调用points一直在我的列表p0的特定索引处引发特定字典的错误。points该points列表在发生错误时包含 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