首页 > 解决方案 > “TypeError: unhashable type: 'set'” 用于 python discord bot

问题描述

我正在使用 python 制作一个不和谐的机器人,它说“TypeError: unhashable type: 'set'”。我不知道为什么:/

def withdraw(person,amount,ininventory,allmoney):
  amount = int(amount)
  if person in allmoney.keys():
    if allmoney[person] > amount:
      if person in ininventory.keys():
        ininventory[person] += amount
        allmoney[person] -= amount
      else:
        ininventory[person] = 0
        ininventory[person] += amount
        allmoney[person] -= amount
      return ininventory[person],allmoney[person],allmoney,ininventory
    else:
      moneynow = allmoney[person]
      allmoney[person] = 0
      return ininventory[person],moneynow,allmoney,ininventory
  else:
    ininventory[person] = 0
    return 0,allmoney[person],allmoney,ininventory

“if person in allmoney.keys():” 就是它所说的“TypeError: unhashable type: 'set'”

这就是调用该函数的原因。

allmoney = {}
ininventory = {}
@client.command()
async def withdraw(ctx, arg):
  global allmoney
  global ininventory
  amountpocket = "broken"
  amountbank = "broken"
  amountpocket,amountbank,allmoney,ininventory = bank.withdraw({ctx.author.name},arg,allmoney,ininventory)
  await ctx.send(f'withdrawed {arg} Dollars!\nYou now have {amountpocket} Dollars in your pocket!\nYou now have {amountbank} in your account!')

这是召唤

amountpocket,amountbank,allmoney,ininventory = bank.withdraw({ctx.author.name},arg,allmoney,ininventory)

如果这不是提问的正确方式,我很抱歉,但我不知道如何使用这个视线而且我是新手。

我想我的最后一个问题被关闭了。

标签: python

解决方案


验证 的数据类型allmoney。不可散列的类型集意味着您将集合视为字典。集合没有键,因此调用allmoney.keys()会出错。集合就像只包含值的数组。

example_set = {"apple", "orange", "pineapple"}

example_dict = {"fruit": "apple", "vegetable": "lettuce"}


推荐阅读