TypeError:“协同程序”对象不支持项分配

2024-04-29 00:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我已经试着修复这个问题好几个小时了,所以这里是错误

File "bot.py", line 178, in sms_token
getters[(token)] = {}
TypeError: 'coroutine' object does not support item assignment

那这是搞乱的代码

async def sms_token(ctx,days,cooldown,name):

tokens = get_tokens_data()


getters = tokens

token = (''.join([secrets.choice
('123456789.=/?@#$nuioqasmkj]{;')
for i in range(20)]))

await ctx.send(f"TOKEN:{token}\nDAYS:{days}\nCOOLDOWN:{cooldown}")
if str(token) in {tokens}:
    return False
else:
    getters[(token)] = {}
    getters[(token)]["days"] = 0
    getters[(token)]["cooldown"] = 0
with open("tokens.json", "w") as f:
    json.dump(tokens,f)
return True

我做错了什么?请帮帮我


Tags: inpytokenjsonreturnbot错误days
1条回答
网友
1楼 · 发布于 2024-04-29 00:20:11

您的getters(又称tokens)是一个协同程序对象。尝试等待结果:

- tokens = get_tokens_data()

->

+ tokens = await get_tokens_data() 

UPD:好的,我试着解释一下

这就是你所拥有的:

async def get_tokens_data():
    return {'tokens': 'data'}

tokens_data = get_tokens_data()
print(tokens_data)
<coroutine object get_tokens_data at 0x7f88821a9d40>

而且tokens_data还不是一个dict或list,它是一个协同程序对象,因此您不能为token_data分配键

tokens_data['a'] = 10

                                     -
TypeError                                 Traceback (most recent call last)
<ipython-input-76-03d025bb79e1> in <module>
      4 tokens_data = get_tokens_data()
      5 print(tokens_data)
  > 6 tokens_data['a'] = 10

TypeError: 'coroutine' object does not support item assignment

要解决此问题,只需在=get_tokens_data()之间添加await

async def get_tokens_data():
    return {'tokens': 'data'}

tokens_data = await get_tokens_data()
#             ^^^^^
print(tokens_data)
tokens_data['a'] = 10
{'tokens': 'data'}
{'tokens': 'data', 'a': 10}

因此,tokens_data将不包含协同程序本身,而是其执行的结果(dict)。就这样

相关问题 更多 >