Bonjour, je travaille sur un projet de jeu vidéo. Pour le moment je n'en suis qu'au prototype mais j'ai décidé d'intégrer tous de même un déplacement utilisant le pathfinding pour les ennemis afin de me faciliter la tache plus tard. Malheureusement lors de l’exécution du code, le programme me renvoie une KeyError :
Traceback (most recent call last):
File "C:/Users/riwan/Desktop/proto_shooter/proto_shooter.py", line 70, in <module>
path = reconstruct_path(came_from, start, goal)
File "C:\Users\riwan\Desktop\proto_shooter\pathfinding_a_star.py", line 40, in reconstruct_path
current = came_from[current]
KeyError: (200, 200)
et j'avoue ne pas comprendre ce que c'est malgré mes recherches.
Voila le morceau de code ayant un soucis :
def reconstruct_path(came_from, start, goal):
current = goal
path = []
while current != start:
path.append(current)
current = came_from[current]
return path
Je vous mets également le code où cette fonction est utilisée :
def a_star_search(graph, start, goal):
frontier = PriorityQueue()
frontier.put(start, 0)
came_from = {}
cost_so_far = {}
came_from[start] = None
cost_so_far[start] = 0
while not frontier.empty():
current = frontier.get()
if current == goal:
break
for next in graph.neighbors(current):
new_cost = cost_so_far[current] + graph.cost(current, next)
if next not in cost_so_far or new_cost < cost_so_far[next]:
cost_so_far[next] = new_cost
priority = new_cost + heuristic(goal, next)
frontier.put(next, priority)
came_from[next] = current
return came_from, cost_so_far
Je précise que je débute en python et que mon erreur est surement évidente mais j'accepterai volontiers de l'aide. Merci.
Logiquement, cette erreur survient lorsque l'on appelle un dictionnaire avec une clef inexistante dedans. Ici ton programme te dis que ta clef (200,200) n'existe pas dans ton dictionnaire.
Flemme de regarder en profondeur dans ton code pourquoi, je te laisse chercher.
Pour contrer l'erreur, tu peux utiliser la méthode get, qui par défaut ne te renverra rien, mais ne lèvera pas d'erreur.
Néanmoins, je te dis ça juste pour ton apprentissage, mais dans ton cas de path-finding ce n'est pas la solution, regarde pourquoi t'appelle ton dictionnaire avec cette valeur sans qu'elle y soit.
Try->Fail->Learn->Converge to success :
Erreur KeyError pathfinding
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Try->Fail->Learn->Converge to success :