Выбрасывает KeyError, хотя ключ есть в словаре

pupa228

Новичок
Пользователь
Сен 25, 2020
6
0
1
Здравствуйте! Только начал изучать пайтон, и столкнулся с проблемой: вылетает ошибка KeyError, хотя ключ есть в словаре.


код:


Python:
from vk_api.longpoll import VkLongPoll, VkEventType
import vk_api
from datetime import datetime
import random

# вписываем свой токен
token = "токен"
vk_session = vk_api.VkApi(token=token)

# тип авторизация
session_api = vk_session.get_api()
longpoll    = VkLongPoll(vk_session)


# все переменные:
balance = {358970681: 0, 457641188: 6000, 590411648: 3000}
nicks   = {358970681: 'áåçÍÈÊèé', 457641188: 'áåçÍÈÊèé', 590411648: 'дурак?'}
check   = 0

print('Запускаю...')


# все функции:

# отправить сообщение
def send(id, text):
    vk_session.method('messages.send', {'user_id': id, 'message': text , 'random_id': 0})



# передача денег
# передать 457641188 128
def pay(x):
    # сколько передаем?
    if x[19 : ] == 'все':
        pay_balance = balance[id]
    else:
        pay_balance = float(x[19 : ])
    print('я зачислил сумму: ' + str(pay_balance))
    
    from_where_pay = id # откуда оплата?
    where_to_pay = x[9 : 18] # куда оплата?
    print('я зачислил айдишник отправителя: ' + str(from_where_pay) + ', а также получателя: ' + str(where_to_pay))


    send(from_where_pay, 'ты отправил ' + str(pay_balance) + '(тест)')
    balance[id] -= pay_balance
    print('отправил отправителю')

    send(where_to_pay, 'ты получил бабки в размере: ' + str(pay_balance) +'(тест)')
    balance[where_to_pay] += pay_balance # здесь ошибка
    print('отправил получателю')
    

    
    
    
# если пришло новое сообщение:
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
        if check == 0:
            msg = event.text.lower()
            id = event.user_id
            if event.from_user and not (event.from_me):
                if msg == "гм":
                    send(id, '?Ты в главном меню ?\n?Выбирай что ты хочешь делать')

                elif "передать " in msg:
                       pay(msg)

                    
                else:
                       send(id, 'Напиши "помощь", чтобы узнать мои команды')

Все время ввожу id который есть в переменных.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
У вас в коде в переменную where_to_pay записывается срез строки и тип переменной соответственно строка (str), а в ключи словаре balance имеют тип int, поэтому ключ не находит и возникает ошибка.
Попробуйте привести переменную where_to_pay к типу int:
Python:
balance[int(where_to_pay)] += pay_balance
 
  • Мне нравится
Реакции: pupa228

pupa228

Новичок
Пользователь
Сен 25, 2020
6
0
1
У вас в коде в переменную where_to_pay записывается срез строки и тип переменной соответственно строка (str), а в ключи словаре balance имеют тип int, поэтому ключ не находит и возникает ошибка.
Попробуйте привести переменную where_to_pay к типу int:
Python:
balance[int(where_to_pay)] += pay_balance
Спасибо вам большое! Целую неделю бился над простейшей ошибкой.
 

Форум IT Специалистов