Почему record = cur.fetchone () [0] внезапно является нетипом - PullRequest
1 голос
/ 04 марта 2020

Итак, я работаю над валютной системой в раздоре. Я использовал следующий код, чтобы дать кому-то деньги.

@client.command()
async def give_money(ctx, member: discord.Member, amount: int):
  connection = sqlite3.connect("testdatabase.db")
  cur = connection.cursor()
  cur.execute(f"UPDATE currency_value_table SET currency = currency - {amount} WHERE   
member_id = {ctx.author.id}")
  record = cur.fetchone()[0]
  if record < amount:
    return await ctx.send("Bruh you too poor to do that!")
  else:
    await ctx.send(f"{amount} given to {member.display_name}")
  cursor.execute(f"UPDATE currency_value_table SET currency = currency + {amount} WHERE member_id = {member.id}")
  connection.commit()
  connection.close()
  database_record = cur.fetchone()[0]
  money = database_record
  await ctx.send(f"You are clearly a broke college student.. you have {money} dollars")

Однако, когда я запускаю его, я получаю это сообщение:

File "discord.bot.py", line 398, in give_money
record = cur.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable

Я не уверен, что это не тип потому что, если я запускаю это:

@client.command()
async def bal(ctx):
  connection = sqlite3.connect("testdatabase.db")
  cur = connection.cursor()
  cur.execute(f"SELECT currency FROM currency_value_table WHERE member_id = {ctx.author.id}")
  record = cur.fetchone()[0]
  connection.commit()
  connection.close()
  await ctx.send(f"You are clearly a broke college student.. you have {record} dollars")
  cur.execute(f"SELECT currency FROM currency_value_table WHERE member_id = {ctx.author.id}")

, это работает нормально?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Это потому, что вы выполнили оператор UPDATE вместо оператора SELECT, который не возвращает никаких данных. В этом случае лучше сначала выполнить оператор SELECT, чтобы проверить текущую сумму в валюте, прежде чем обновлять таблицу.

cur.execute(f"SELECT currency FROM currency_value_table WHERE member_id = {ctx.author.id}")
record = cur.fetchone()[0]
0 голосов
/ 04 марта 2020

Пожалуйста, удалите connection.close (), оно не требуется и проверьте его один раз!

enter image description here

...