'RuntimeError: maksymalna głębokość rekursji przekroczona w cmp' podczas pracy z listami
Wystąpił błądRuntimeError: maximum recursion depth exceeded in cmp
podczas pracy z listami. Dokładniej,p0 in points
, thepoints.index(p0)
wywołanie metody, jak równieżpoints.remove(p0)
wywołanie metody napoints
lista podnosi błąd dla konkretnego słownikap0
w określonym indeksie mojegopoints
lista. Thepoints
lista zawiera 4700 słowników w momencie wystąpienia błędu, zmniejszono jeden słownik o jeden z listy 12000 obiektów, dopóki błąd nie zostanie zgłoszony. Thep0
Słownik zawiera odniesienie do innego słownika na liście, który w zwrotach zawiera odniesienie dop0
obiekt. Thep0
słownik oraz słownik zawiera odniesienie do dwukrotnego pojawienia się w słownikupoints
lista, zanim błąd zostanie zgłoszony przez dowolne z trzech wywołań metody.
Skąd pochodzi ten błąd?
EDYTOWAĆ: Oto kod powodujący błąd.
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
Oto definicjafind
, gdziedist
oblicza odległość między dwoma punktami.
def find(p1, points, tolerance = 0.01):
for p2 in points:
if dist(p2['coords'], p1['coords']) <= tolerance:
return p2
return False
Oto pełny ślad błędu:
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