不和.py字典的运行时错误

2024-06-28 00:25:59 发布

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

所以,我一直在尝试做一个机器人,循环通过我的服务器中的所有成员。我使用get_all_members()生成器来完成此操作。在

for member in client.get_all_members():
      userName = str(member.name)
      userGame = str(member.game)
      userID = str(member.id)
      print(userName, userGame, userID)
      await client.send_message(message.channel, "User " + userName + " 
      (<@" + userID + ">) is playing " + userGame)

我在运行时随机得到这个错误:

^{pr2}$

如何避免这个错误?在


Tags: 服务器clientmessageforget错误username机器人
1条回答
网友
1楼 · 发布于 2024-06-28 00:25:59

在循环之前,请尝试用get_all_members生成一个列表。在

for member in list(client.get_all_members()):
    ...

实际情况是Server对象将它们的Member存储在字典中。当您await一个协程时,您允许其他协程在您等待时运行,其中一个协程会使Server对象保持最新。每当Server的成员身份发生变化时,字典也会随之更改。因为您不应该在某个事物发生变化时迭代它,Python会检测到它并终止程序。在

通过先将值读入列表中,我们不会注意到字典何时发生了更改。在

最新版本更改了此行为,这将在here中讨论

相关问题 更多 >