【发布时间】:2019-02-21 14:58:59
【问题描述】:
我正在尝试使用以下 try 和 except 块来捕获 Index out of range 错误。
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]
但它陷入了无限循环。我希望它忽略它并继续附加下一个实例。 (作为参考,它的一段代码使用另一个函数的度量来确定在每个操作中插入、替换或删除了哪些单词)。
我觉得我应该知道这一点,但老实说我被困住了。
【问题讨论】:
-
如果您有
IndexError,则表明您已到达循环的末尾。你可以在except IndexError:中拥有break -
您是否打印了
x和y以查看它们是否都变成0? -
因为异常中的循环没有终止条件。当它遇到异常时,它会移动到异常部分,然后移动到循环的下一次迭代。您可能想在除了部分之外放置一个中断条件。
-
首先,重新提出您捕获的错误而不是忽略(除了打印通用消息),以便您知道是什么导致了错误。不过,一般来说,尽量在
try块中保留尽可能少的代码,以减少预期错误的可能来源。 -
这种方法根本上是不健全的。不要捕获超出范围的错误。通过修复代码防止它们:这些错误不会在正确的程序中发生。它们发生是因为您的逻辑有误。无限循环只是这个潜在问题的一个症状(因为在发生错误的情况下,您没有提供更新索引的逻辑)。
标签: python try-except