A
A
animanshnik2019-04-16 15:46:30
Python
animanshnik, 2019-04-16 15:46:30

Why in 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()

Mistake:
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

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey Gornostaev, 2019-04-16
@animanshnik

If the variable contains an lowerempty string, then the method splitwill return an empty array. An attempt to access the first element of an empty array naturally causes an exception IndexError. I suspect that you should use a diaper of elifs instead of if's.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question