почему мой цикл, за исключением блока, застрял в цикле? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь поймать ошибку индекса вне диапазона при следующей попытке, кроме блока.

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]

, но он застревает в бесконечном цикле.Я хочу, чтобы он игнорировал его и продолжал добавлять следующие экземпляры.(Для справки это кусок кода, который использует метрику другой функции, чтобы определить, какие слова были вставлены, заменены или удалены при каждой операции).

Я чувствую, что должен это знать, но, честно говоря, я застрял.

1 Ответ

0 голосов
/ 21 февраля 2019

Не делай пока True.Измените условие 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")
...