#python
#python
Вопрос:
Я создаю бота discord с использованием 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
«если человек в allmoney.keys():» это то, что он говорит «Ошибка типа: нехешируемый тип: ‘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)
Извините, если это неправильный способ задавать вопросы, но я не знаю, как использовать этот вид, и я новичок в этом.
Я думаю, что мой последний вопрос был закрыт.
Комментарии:
1. Почему вы передаете
ctx.author.name
как set?{'string'}
создает экземпляр set в Python, а встроенный тип данных set не имеет требуемого метода для проверки принадлежности к объекту, возвращаемомуdict.keys()
. Попробуйте просто сделатьbank.withdraw(ctx.author.name, ...)
вместо этого, удалив фигурные скобки.2. о, хорошо, я сделаю это
3. он по-прежнему не работает…
4. Даже если это все равно не сработает, это все равно менее неправильно, чем оригинал, который никогда не сможет сработать. Не отклоняйте изменение, которое что- то исправляет, только потому, что оно не исправляет все .
5. Я исправил проблему, но я не знаю, как закрыть тему, поэтому, если модератор может для меня, пожалуйста, сделайте
Ответ №1:
Проверьте тип данных allmoney
. Нехешируемый набор типов означает, что вы обрабатываете набор так, как если бы он был словарем. Наборы не имеют ключей, поэтому вызов allmoney.keys()
выдаст ошибку. Наборы похожи на массивы, которые содержат только значения.
example_set = {"apple", "orange", "pineapple"}
example_dict = {"fruit": "apple", "vegetable": "lettuce"}