我正在尝试编写一个函数,它可以将1个单位移动到网格左侧(在x轴上)。它只应该在左边有一个有效的坐标时才起作用,如果没有(即起始点在网格的边缘上),则该函数应该返回None
。这里是我的尝试:Python - 矩阵IndexError异常不起作用
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-except
不允许。为什么是这样?如何纠正?
无论'if'语句是否在'try'块中,代码的结果都是相同的。如果存在异常,那么函数将返回None并且不执行块的其余部分。 – ggordon
ahh yes现在我明白了,您需要参考Jokab的答案,但是它的原因是-1是python中的有效索引。我用一个简单的if语句取代了try/except,它应该做同样的事情。当你只有try/except的代码工作的原因是因为代码完成没有问题,并没有找到一个返回语句,所以简单地返回None默认情况下,或者至少这是我的猜测。 @ggordon – dhdavvie
是用'if'代替'try-except'是个好主意,谢谢! – ggordon