'IndexError: индекс строки вне диапазона', если индекс короче максимального индекса в строке. Python - PullRequest
0 голосов
/ 29 мая 2020

Итак, сначала немного контекста. В качестве небольшого забавного проекта я работаю над небольшим компилятором, который читает текстовые файлы и является своего рода фальшивым языком программирования. В любом случае, одна и та же ошибка возникала дважды. Один раз для моего оператора if и один раз для моего математического оператора на языке (кстати, он читается в python3). Ошибка - IndexError: String Index вне допустимого диапазона, даже если индекс меньше len (string) -1. Вот мой код для оператора if:

    elif (code[0] + code[1]) == 'if':
        # sta is the index
        sta = 7
        i = 0
        varname = ''
        while i == 0:
            if code[sta] == '=':
                i = 0
            else:
                varname = varname + code[sta]
                sta += 1
        sign = code[sta]
        sta += 2
        i = 0
        condition = ''
        while i == 0:
            if code[sta] == ':':
                i = 0
            else:
                condition = condition + code[sta]
                sta += 1
        sta += 2
        if ints[varname] == int(condition):
            codeif = code[sta:(len(code) - 1)]
            readCode(codeif)

И строка, вызывающая ошибку:

if code[sta] == '=':

Код, через который я прохожу, точно 15 indexs long В любом случае мне нужна помощь. Заранее спасибо!

1 Ответ

1 голос
/ 29 мая 2020

Проблема в том, что ваш = имеет индекс 4, при условии, что ваш ввод:

      012345678901234567890
code="if x= 9: chr *Hello!;"

Но если sta начинается с 7 и только увеличивается, он никогда не найдет =. В конце концов sta достигает 21, что является> максимальным индексом 20. Таким образом, ваше утверждение о том, что even though the index is less that len(string)-1., похоже, здесь не выполняется.

Как отмечали другие комментаторы, похоже, нет способа exit, что l oop, поскольку i начинается с 0, никогда не изменяется, кроме как снова установить на 0, а l oop выходит только если i != 0. Просто поработайте немного над logi c, и вы должны снова работать.

Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...