python - 在 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("`키키야 가입`을 입력해 먼저 가입을 하세요", '에러 감지 기능')
我该怎么做才能不出错
(对不起我的英语水平很差)
解决方案
导致问题的线路是
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 表的结构和内容,但您明白了。如果有任何不清楚的地方,我很乐意详细说明。
推荐阅读
- php - POST mywebsite/wp-admin/admin-ajax.php 400(错误请求)
- matrix-multiplication - R中矩阵乘法的运行时间(运算符%*%)
- oauth - OpenId / OAuth 2 流 - 使用 AWS Cognito 的场景
- android - URL(url).readText 返回空响应 KOTLIN ANDROID
- excel - VBA 选择输入框中指示的项目
- google-sheets - 更新单元格的两个相关下拉列表
- npm - NPM 安装因错误“ERR!cb() never call!”而崩溃
- coinbase-api - Coinbase Oauth2 应用交易发送范围限制
- javascript - 无法使用axios获取数据
- html - 如何将永久字母放入 div