Задать вопрос
@animanshnik

Почему в python IndexError: list index out of range?

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import vk_api
from vk_api.utils import get_random_id

vk_session = vk_api.VkApi(
    token='Опа,а нее, это так не работает')

vk = vk_session.get_api()

group_id = и это тоже заберу
longpoll = VkBotLongPoll(vk_session, str(group_id))


def main():
    for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
            text = event.object.text
            lower = text.lower()
            peer_id = event.object.peer_id
            user_id = event.object.from_id
            if peer_id != event.object.from_id:
                chat_id = peer_id - 2000000000
                if lower == "!помощь":
                    send_message_to_chat(chat_id,
                                         'Помощь:\n!бассейн\n!мероприятия\n!список отряда (для вожатых) ((не работает)). \nдобавляем ТОЛЬКО ЧЕРЕЗ МЕНЯ')
                if lower == "!бассейн":
                    send_message_to_chat(chat_id,
                                         'шапочка\nсланцы\nполотенце\nмочалка\nмыло\шампунь\nплавки\купальники')
                if lower == "!мероприятия":
                    send_message_to_chat(chat_id, 'Список ближе к лету')
                if lower == "aaaa":
                    send_message_to_chat(chat_id,
                                         'САНЯ, ЛЕНИВАЯ ЖОПА, СДЕЛАТЬ НЕ СМОГ, ВОТ ТЕПЕРЬ ВЫКРУЧИВАЙСЯ @id404016892 (Ты попал лебовски!)')
                if lower == "!add":
                    send_message_to_chat(chat_id,
                                         'САНЯ, ЛЕНИВАЯ ЖОПА, СДЕЛАТЬ НЕ СМОГ, ВОТ ТЕПЕРЬ ВЫКРУЧИВАЙСЯ @id404016892 (Ты попал лебовски!)')
                if lower == "!список отряда":
                    members_data = vk.messages.getConversationMembers(peer_id=peer_id)
                    for i in members_data['profiles']:
                        send_message_to_chat(chat_id, i,)
                        input()
                if lower == "!add":
                    send_message_to_chat(chat_id,
                                         '1')
                if lower == "":
                    send_message_to_chat(chat_id,
                                         '1')
                if lower == "":
                    send_message_to_chat(chat_id,
                                         '1')

                print(lower)
                if lower.split()[0] == '!бан':
                    ban(chat_id, user_id, lower)


def ban(chatid, userid, text):
    print(2)
    if isadmin(chatid, userid):
        if len(text.split()) > 1:
            candidat = text.split()[1].strip().lower()
            print(4)
            if candidat[:3] == '[id' and '|' in candidat:
                print(5)
                banid = candidat.split('|')[0][3:]
                if banid.isdigit():
                    print(6)
                    banid = int(banid)
                    members_data = vk.messages.getConversationMembers(peer_id=2000000000 + chatid)
                    for i in members_data['items']:
                        if banid == i['member_id']:
                            print(7)
                            send_message_to_chat(chatid, 'Соре, так надо было')
                            vk.messages.removeChatUser(chat_id=chatid, user_id=banid)
                            break
                else:
                    send_message_to_chat(chatid, 'Введите адресата через @, например !бан @id1')
            else:
                send_message_to_chat(chatid, 'Введите адресата через @, например !бан @id1')
        else:
            send_message_to_chat(chatid, 'Введите адресата через @, например !бан @id1')
    else:
        send_message_to_chat(chatid, 'Вы должны быть админом в беседе')


def isadmin(chatid, userid):
    members_data = vk.messages.getConversationMembers(peer_id=2000000000 + chatid)
    for i in members_data['items']:
        if userid == i['member_id']:
            if 'is_admin' in i:
                return True
            else:
                return False

def send_message_to_chat(chatid, message):
        print('message to chat {} "{}"'.format(chatid, message))
        vk.messages.send(
            chat_id=chatid,
            message=message,
            random_id=get_random_id()
        )


if __name__ == '__main__':
    main()

Ошибка:
Traceback (most recent call last):
  File "/home/DLor/mysite/bottt.py", line 105, in <module>
    main()
  File "/home/DLor/mysite/bottt.py", line 53, in main
    if lower.split()[0] == '!бан':
IndexError: list index out of range
  • Вопрос задан
  • 5111 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Если в переменной lower пустая строка, то метод split вернёт пустой массив. Попытка обратиться к первому элементу пустого массива закономерно вызывает исключение IndexError Подозреваю, что вам вместо пелёнки if'ов надо использовать пелёнку elif'ов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы