Почему я получаю эту ошибку? Эта ошибка не ожидалась - PullRequest
0 голосов
/ 09 июля 2020

Скажите, пожалуйста, почему я получаю предупреждение Sequence index is not an int, slice, or instance with __index__pylint(invalid-sequence-index), я предоставил код файла ниже.

import random
from ppwiinputs import *

print("This is PPWI\n")
end_chat = False
while end_chat == False:   
    USER_INPUT = input(">")

    if USER_INPUT.lower()  in GREETINGS:
        print(f"{GREETINGS_RESPONSE[random.randint(0,len(GREETINGS_RESPONSE)-1)]}\n")
    elif USER_INPUT.lower() in END:
        print(END_RESPONSE[random.randint(0,len(END_RESPONSE)-1)])
        quit()
    elif not(USER_INPUT.lower() in GREETINGS) or not(USER_INPUT.lower() in END):
        print("Can't find an answer to that, still learning.\n")


def grammarCorrection(USER_INPUT):
        for n in RESPONSE[range(0,len(RESPONSE)-1)]:
            for i in n:
                if (USER_INPUT in i) and (USER_INPUT != i):
                    print(f'do you mean {i}')

Я еще не тестировал функцию и не вызывал ее где-либо в коде . мой VSCode начал показывать мне это предупреждение, и мне было любопытно узнать, что это вообще такое. файл ppwiinputs.py

GREETINGS_RESPONSE = ['HEY.', 'HOWDY.', 'WASSUP.', 'HI THERE.', "HEY, WHAT'S UP?.", 'NICE TO SEE YOU.', 'GREETINGS AND SALUTATIONS.', 'GREETINGS.']
GREETINGS = ['hi ppwi','hello ppwi','hi', 'hello']
END = ['bye', 'ok, bye', 'bye bye', 'okay bye', 'see you']
END_RESPONSE = ['BYE BYE.', 'NICE MEETING YOU, BYE.', 'BYE.', 'SEE YOU SOON.']
RESPONSE = [GREETINGS_RESPONSE, GREETINGS, END, END_RESPONSE]

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Не уверен, какой список вам нужен, но похоже, что вы просто хотите перебрать список (списков) RESPONSE, используя эту строку for n in RESPONSE[range(0,len(RESPONSE)-1)]:. Вы можете просто заменить его на for n in RESPONSE:, если это так.

1 голос
/ 09 июля 2020

Во-первых, чтобы уточнить. Это не предупреждение , это ошибка . Я не запускал код, вызывающий функцию, но если кто-то это сделает, то получит TypeError. Как говорят другие ответы, это происходит из-за того, что вы пытаетесь использовать объект range для получения значений из списка, и вы не можете этого сделать, потому что объект диапазона создает значения итерации на лету поэтому ему нужно что-то еще, например, с помощью for l oop, чтобы распечатать значения, в отличие от использования срезов в списке.

Кроме того, если вы используете pylint в качестве линтера в VSCode, я предлагаю вам проверить pyling messages каждый раз, когда вы хотите узнать, почему вы получаете какое-то предупреждение или ошибку, вы намного лучше поймете, что происходит. Например, поиск ошибки invalid-sequence-index говорит: «Используется, когда тип последовательности проиндексирован с недопустимым типом. Допустимые типы - это целые числа, срезы и объекты с методом индекса».

Надеюсь, это поможет вам поддержать другие ответы :)

1 голос
/ 09 июля 2020

Эта строка for n in RESPONSE[range(0,len(RESPONSE)-1)]: дает предупреждение.

range является классом и возвращает объект, который вызывает предупреждение, потому что не рекомендуется использовать его в качестве индекса для списка.

Чтобы делать то, что вы хотите, вы можете просто разрезать список с помощью:

for n in RESPONSE[:-1]:
...