【发布时间】:2021-01-13 13:48:43
【问题描述】:
我正在使用 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'" for
这就是调用函数的原因。
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)
如果这不是提问的正确方式,我很抱歉,但我不知道如何使用这个视线,而且我是新手。
我想我的最后一个问题被关闭了。
【问题讨论】:
-
你为什么将
ctx.author.name作为一个集合传递?{'string'}在 Python 中生成一个集合的实例,而内置的集合数据类型没有测试dict.keys()返回的对象的成员资格所需的方法。尝试只做bank.withdraw(ctx.author.name, ...),去掉花括号。 -
哦,好吧,我会这样做的
-
还是不行……
-
即使它仍然不起作用,它仍然比原来的错误更少,它可能永远起作用。不要仅仅因为不能修复所有问题而拒绝修复某事的更改。
-
我解决了这个问题,但我不知道如何关闭线程,所以如果版主可以帮我,请做
标签: python