首页 > 解决方案 > 在 python 中使用 SQLite3 时出现 TypeError

问题描述

我正在制作一个具有金钱功能的不和谐机器人,但我的代码出错了。

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("`키키야 가입`을 입력해 먼저 가입을 하세요", '에러 감지 기능')

我该怎么做才能不出错

(对不起我的英语水平很差)

标签: pythonsqlite

解决方案


导致问题的线路是

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 表的结构和内容,但您明白了。如果有任何不清楚的地方,我很乐意详细说明。


推荐阅读