Python-矩阵索引器异常不工作
我正在尝试编写一个函数,该函数允许在网格的x轴上向左移动1个单元。仅当左侧有有效坐标时,该函数才起作用,如果没有,即起点位于网格边缘,则该函数应返回None。以下是我的尝试:Python-矩阵索引器异常不工作,python,matrix,indexing,Python,Matrix,Indexing,我正在尝试编写一个函数,该函数允许在网格的x轴上向左移动1个单元。仅当左侧有有效坐标时,该函数才起作用,如果没有,即起点位于网格边缘,则该函数应返回None。以下是我的尝试: def left_move(point): try: LEFT = grid[point[1]][point[0]-1] except IndexError: return None if LEFT == '.': change = [-1,0]
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
假设起点为[0,3],因此位于网格边缘,我只运行代码的顶部:
def left_move(point):
try:
LEFT = grid[point[1]][point[0]-1]
except IndexError:
return None
它按预期返回None。但是,如果执行整个块,它将返回[-1,3],该值在网格之外,try不允许使用。为什么会这样?如何纠正呢 这里,您需要将其余代码放在try语句中。否则,它将尝试、失败,然后运行其余的代码
def left_move(point):
if point[0]-1 != -1:
LEFT = grid[point[1]][point[0]-1]
if LEFT == '.':
change = [-1,0]
for idx, amount in enumerate(change):
point[idx]+=amount
return point
return None
else:
return None
在这里,您需要将其余的代码放在try语句中。否则,它将尝试、失败,然后运行其余的代码
def left_move(point):
if point[0]-1 != -1:
LEFT = grid[point[1]][point[0]-1]
if LEFT == '.':
change = [-1,0]
for idx, amount in enumerate(change):
point[idx]+=amount
return point
return None
else:
return None
这是因为Python在数组索引中对-1的解释是数组的最后一个元素-1是引用数组元素的合法方式,因此不会触发索引器异常
>>> a = [0,1,2]
>>> print a[-1]
2
您需要手动检查给定的值是否解析为-1,然后进行相应的处理。这是因为Python在数组索引中对-1的解释是数组的最后一个元素-1是引用数组元素的合法方式,因此不会触发索引器异常
>>> a = [0,1,2]
>>> print a[-1]
2
您需要手动检查给定的值是否解析为-1,然后相应地进行处理。无论if语句是否在try块中,代码都会产生相同的结果。如果出现异常,那么函数将返回None,而不执行块的其余部分。啊,是的,现在我明白了,您需要参考Jokab的答案,但这是因为-1在python中是一个有效的索引。我用一个简单的if语句替换了try/except,它也应该这样做。当您只使用try/except时,代码可以工作的原因是,代码将毫无问题地完成,并且找不到return语句,因此默认情况下只返回None,或者至少这是我的猜测@Ggordonies用if替换try是个好主意,谢谢!无论if语句是否在try块中,代码都会产生相同的结果。如果出现异常,那么函数将返回None,而不执行块的其余部分。啊,是的,现在我明白了,您需要参考Jokab的答案,但这是因为-1在python中是一个有效的索引。我用一个简单的if语句替换了try/except,它也应该这样做。当您只使用try/except时,代码可以工作的原因是,代码将毫无问题地完成,并且找不到return语句,因此默认情况下只返回None,或者至少这是我的猜测@Ggordonies用if替换try是个好主意,谢谢!