Ошибка типа при использовании SQLite3 на python - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю диссон-бота с функцией денег, и мой код выдает ошибку.

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 270, in _run_event
    await coro(*args, **kwargs)
  File "c:\BOT\kikibot.py", line 1050, in on_message
    ohyeah=int(cur.execute(f'SELECT money FROM USERS WHERE id={str(message.author.id)}'))+rand
TypeError: int() argument must be a string, a bytes-like object or a number, not 'sqlite3.Cursor'

, и мой код такой

elif message.content=='키키야 돈줘':
                asdfa=cur.execute('SELECT * FROM USERS')
                for row in asdfa:
                    if str(message.author.id) in row:
                        await makeembed('1원부터 1000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                        if str(message.author.id) in vip:
                            await makeembed('1원부터 10000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                            rand=random.randrange(1, 10001)
                        else:
                            await makeembed('1원부터 1000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                            rand=random.randrange(1, 1001)
                        ohyeah=int(cur.execute(f'SELECT money FROM USERS WHERE id={str(message.author.id)}'))+rand
                        cur.execute(f'UPDATE USERS SET money={ohyeah} WHERE id={str(message.author.id)}')
                        await makeembed(f'**{rand}**원을 줬습니다\n현재 **{message.author.display_name}**님의 돈 액수: {ohyeah}', '돈 기능')
                        cur.commit()
                        return

                    if str(sheet["A" + str(i)].value) == str(message.author.id):
                        await makeembed('1원부터 1000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                        if str(message.author.id) in vip:
                            await makeembed('1원부터 10000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                            rand=random.randrange(1, 10001)
                        else:
                            await makeembed('1원부터 1000원 까지 아무 양의 돈을 줍니다', '돈 기능')
                            rand=random.randrange(1, 1001)
                        ohyeah=int(sheet['C'+str(i)].value)+rand
                        sheet['C'+str(i)].value=""
                        sheet['C'+str(i)].value=str(ohyeah)
                        await makeembed(f'**{rand}**원을 줬습니다\n현재 **{message.author.display_name}**님의 돈 액수: {ohyeah}', '돈 기능')
                        flag = 1    
                        file.save('정보.xlsx')
                await makeembed("`키키야 가입`을 입력해 먼저 가입을 하세요", '에러 감지 기능')

Что я могу сделать, чтобы не делать ошибка

(извините, у меня Engli sh навыки плохие)

1 Ответ

0 голосов
/ 05 февраля 2020

Строка, вызывающая проблему:

ohyeah=int(cur.execute(f'SELECT money FROM USERS WHERE id {str(message.author.id)}'))+rand

cur.execute не возвращает типы данных, которые могут быть преобразованы в int. Вместо этого вы, вероятно, хотите сначала получить данные, а затем принудительно установить тип данных int для этого возвращаемого объекта. Другими словами,

cur.execute(f'SELECT money FROM USERS WHERE id {str(message.author.id)}')
money = cur.fetchall()
money = [int(x) for x in money] # Assuming multiple rows are selected with query

Последняя строка зависит от структуры и содержимого вашей таблицы SQL, но вы поняли идею. Если что-то неясно, я был бы более чем рад разработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...