为什么我的 try-except 块卡在了循环中?
why is my try- except block stuck in the loop?
我正在尝试使用以下 try 和 except 块捕获索引超出范围错误。
def getStepList(r, h, d):
x = len(r)-1
y = len(h)-1
list = []
while True:
try:
if x == 0 and y == 0:
break
elif x >= 1 and y >= 1 and d[x][y] == d[x-1][y-1] and r[x-1] == h[y-1]:
x = x - 1
y = y - 1
elif y >= 1 and d[x][y] == d[x][y-1]+1:
#insertion
x = x
y = y - 1
list.append(h[y])
print('insertion')
elif x >= 1 and y >= 1 and d[x][y] == d[x-1][y-1]+1:
#substitution
x = x - 1
y = y - 1
list.append(r[x])
print('substitution')
else:
#deletion
x = x - 1
y = y
list.append(r[x])
print('deletion')
except IndexError:
print('index error')
return list[::-1]
但它陷入了无限循环。我希望它忽略它并继续附加下一个实例。 (作为参考,它的一段代码使用另一个函数的度量来确定在每个操作中插入、替换或删除了哪些单词)。
我觉得我应该知道这一点,但老实说我被卡住了。
暂时不要做 是的。将您的 while 条件更改为:
while(not (x == 0 and y == 0)):
在你的异常中也添加一个中断
except IndexError:
print('index error')
break
您还可以添加一些检查以查看具体的索引错误可能是什么:
d_len = len(d)
r_len = len(r)
h_len = len(h)
d_x_of_y_len = len(d[x][y])
if(x > d_len):
print("x is too big")
if(y > d_x_of_y_len):
print("y is too big")
我正在尝试使用以下 try 和 except 块捕获索引超出范围错误。
def getStepList(r, h, d):
x = len(r)-1
y = len(h)-1
list = []
while True:
try:
if x == 0 and y == 0:
break
elif x >= 1 and y >= 1 and d[x][y] == d[x-1][y-1] and r[x-1] == h[y-1]:
x = x - 1
y = y - 1
elif y >= 1 and d[x][y] == d[x][y-1]+1:
#insertion
x = x
y = y - 1
list.append(h[y])
print('insertion')
elif x >= 1 and y >= 1 and d[x][y] == d[x-1][y-1]+1:
#substitution
x = x - 1
y = y - 1
list.append(r[x])
print('substitution')
else:
#deletion
x = x - 1
y = y
list.append(r[x])
print('deletion')
except IndexError:
print('index error')
return list[::-1]
但它陷入了无限循环。我希望它忽略它并继续附加下一个实例。 (作为参考,它的一段代码使用另一个函数的度量来确定在每个操作中插入、替换或删除了哪些单词)。
我觉得我应该知道这一点,但老实说我被卡住了。
暂时不要做 是的。将您的 while 条件更改为:
while(not (x == 0 and y == 0)):
在你的异常中也添加一个中断
except IndexError:
print('index error')
break
您还可以添加一些检查以查看具体的索引错误可能是什么:
d_len = len(d)
r_len = len(r)
h_len = len(h)
d_x_of_y_len = len(d[x][y])
if(x > d_len):
print("x is too big")
if(y > d_x_of_y_len):
print("y is too big")