RuntimeError: maximum recursion depth exceeded in cmp
リストを操作しているときにエラーが発生しました。より正確にはp0 in points
、リストのメソッドpoints.index(p0)
呼び出しと同様に、リストの特定のインデックスで特定の辞書のエラーが発生しています。リストには、エラーの時点で 4700 個の辞書が含まれており、エラーが発生するまで、12000 個のオブジェクトのリストから 1 個ずつ辞書を減らしました。ディクショナリには、リスト内の別のディクショナリへの参照が含まれています。このリストには、オブジェクトへの参照が含まれています。ディクショナリとそれに含まれるディクショナリは、3 つのメソッド呼び出しのいずれかによってエラーが発生する前に、リストに 2 回表示される参照を含みます。points.remove(p0)
points
p0
points
points
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
は 2 点間の距離を計算します。
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