File "c:\work\party\main.py", line 216, in buy_ticket await check_and_notify_payment(user_id, order_sign) File "c:\work\party\main.py", line 150, in check_and_notify_payment ticket_db[user_id]["status"] = "paid" ~~~~~~~~~^^^^^^^^^ KeyError: 7916374491 после оплаты на карту в платежке пишет в консоле такую ошибку сранную
Ошибка KeyError: 7916374491 означает, что в словаре ticket_db отсутствует ключ 7916374491. Это может происходить по нескольким причинам: Возможные причины ошибки: Пользователь не был добавлен в ticket_db перед оплатой Проверь, добавляется ли user_id в ticket_db перед вызовом check_and_notify_payment. Код удаления записи перед вызовом check_and_notify_payment Где-то в коде может быть del ticket_db[user_id] или аналогичная операция. Обращение к ticket_db[user_id] до его создания Например, если ticket_db инициализируется динамически и user_id туда не попал. Асинхронное поведение (гонка состояний) Возможно, другой процесс удаляет запись раньше, чем check_and_notify_payment ее использует. Как исправить: 1. Проверить, существует ли ключ перед обновлением Добавь проверку перед ticket_db[user_id]["status"] = "paid": pythonКопироватьРедактировать if user_id in ticket_db: ticket_db[user_id]["status"] = "paid" else: print(f"[ERROR] User {user_id} not found in ticket_db") 2. Отладочный вывод перед вызовом check_and_notify_payment Добавь перед вызовом await check_and_notify_payment(user_id, order_sign): pythonКопироватьРедактировать print(f"ticket_db keys: {list(ticket_db.keys())}") print(f"Checking payment for user_id: {user_id}") Так можно убедиться, что user_id действительно есть в ticket_db. 3. Добавить запись в ticket_db, если её нет Если пользователь должен быть в ticket_db, но по какой-то причине отсутствует, добавь его: pythonКопироватьРедактировать if user_id not in ticket_db: ticket_db[user_id] = {"status": "pending"} 4. Проверить момент добавления пользователя Убедись, что перед check_and_notify_payment в ticket_db добавляются все пользователи, совершающие платежи. Попробуй добавить эти исправления и посмотри, исчезнет ли ошибка.