python - “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)
如果这不是提问的正确方式,我很抱歉,但我不知道如何使用这个视线而且我是新手。
我想我的最后一个问题被关闭了。
解决方案
验证 的数据类型allmoney
。不可散列的类型集意味着您将集合视为字典。集合没有键,因此调用allmoney.keys()
会出错。集合就像只包含值的数组。
example_set = {"apple", "orange", "pineapple"}
example_dict = {"fruit": "apple", "vegetable": "lettuce"}
推荐阅读
- reactjs - 如何在反应中从一个组件调用函数到另一个组件
- reactjs - 加载 Webpack 时出现意外的令牌错误
- c++ - BST 中序方法引用向量显示错误:声明不兼容
- python - sqlalchemy 查询中的自定义方法
- google-cloud-platform - 谷歌云实例无法通过腻子连接 - 获取“不支持的身份验证方法可用(服务器发送:公钥)”
- aws-lambda - Lambda - 存储/传递 Redshift 连接
- .net - 如何更改 Azure 队列存储 QueueClient.CreateIfNotExists() 的默认超时?
- python - python中if else语句中的值错误
- jquery - 如何在 KendoUI Grid Popup 编辑器中访问输入元素的值?
- go - 如何正确调整 Go 中的 Argon2 参数以减少内存消耗?