'RuntimeError: le maximum de la profondeur de récursion dépassé en cmp' lorsque l'on travaille avec des listes

J'ai rencontré l'erreur RuntimeError: maximum recursion depth exceeded in cmp lorsque l'on travaille avec des listes. Plus précisément, p0 in points, le points.index(p0) appel de la méthode ainsi que la points.remove(p0) appel de méthode sur l' points liste ont été la collecte de l'erreur d'un dictionnaire spécifique p0 à un indice spécifique de mon points liste. Le pointsliste contient 4700 dictionnaires au moment de l'erreur réduite d'un dictionnaire à l'autre par un à partir d'une liste de 12000 objets jusqu'à ce que l'erreur est générée. Le p0 dictionnaire contient une référence à un autre dictionnaire dans la liste, ce qui en retourne contient une référence à la p0 objet. Le p0 dictionnaire ainsi que le dictionnaire qu'il contient une référence à apparaître deux fois dans la points liste avant de l'erreur est déclenchée par l'une des trois appel de méthode.

D'où vient cette erreur vient?

MODIFIER: Voici le code qui génère l'erreur.

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

Voici la définition de l' find, où dist calcule la distance entre deux points.

def find(p1, points, tolerance = 0.01):
    for p2 in points:
        if dist(p2['coords'], p1['coords']) <= tolerance:
            return p2
    return False

Voici le plein de trace de l'erreur:

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
Pouvez-vous nous montrer un peu de code?
J'ai édité la question.
p0 est juste un simple vieux python dict?
Je ne vois pas la récursivité. Nous montrer plus de code! Où est find venir?
L'erreur semble être soulevées par le natif méthodes de l'objet de la liste. Le traceback ne pas montrer quoi que ce soit de plus d'un niveau.

OriginalL'auteur Alexandre Kirszenberg | 2013-01-09