我正在嘗試編寫一個函數,它可以將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