Ich versuche, eine Funktion zu schreiben, die eine Bewegung 1 Einheit nach links (in der X-Achse) in einem Raster ermöglicht. Es sollte nur funktionieren, wenn sich links eine gültige Koordinate befindet, und wenn nicht (d. H. Der Startpunkt befindet sich am Rand des Rasters), sollte die Funktion None
zurückgeben. Hier ist mein Versuch:Python - Matrix IndexError Ausnahme funktioniert nicht
def left_move(point):
try:
LEFT = grid[point[1]][point[0]-1]
except IndexError:
return None
if LEFT == '.':
change = [-1,0]
for idx, amount in enumerate(change):
point[idx]+=amount
return point
return None
Sagen Sie der Ausgangspunkt [0,3]
ist und deshalb am Rand des Gitters und ich nur den oberen Teil des Codes auszuführen:
def left_move(point):
try:
LEFT = grid[point[1]][point[0]-1]
except IndexError:
return None
Es gibt None
wie erwartet. Wenn der gesamte Block jedoch ausgeführt wird, gibt er [-1,3]
zurück, das sich außerhalb des Rasters befindet und nicht von try-except
zugelassen werden sollte. Warum ist das? Und wie kann es korrigiert werden?
Der Code liefert das gleiche Ergebnis, egal ob die 'if' Anweisung innerhalb des' try' Blocks ist oder nicht. Wenn es eine Ausnahme gibt, wird die Funktion keine NULL zurückgeben und den Rest des Blocks nicht ausführen. – ggordon
ahh ja jetzt ich sehe, Sie müssen auf Jokab's Antwort beziehen, aber es ist, weil -1 ein gültiger Index in Python ist. Ich habe das try/except durch eine einfache if-Anweisung ersetzt, es sollte dasselbe tun. Der Grund, warum der Code funktionierte, wenn Sie nur den Befehl try/except hatten, war der, dass der Code ohne Probleme endete und keine return-Anweisung gefunden wurde. Daher wurde einfach per Default keine zurückgegeben, oder zumindest denke ich. @ggordon – dhdavvie
Ja Ersetzen der 'try-except' mit' if' ist eine gute Idee, danke! – ggordon