python/discord.py中的全局变量



所以我在代码的一开始就声明了3个变量

setup_prefix = None
setup_role: Role = None
setup_channel: TextChannel = None

然后在on_message事件中,我尝试调用它们并更改它们的值

async def on_message(message):
if servers_setup[message.guild.id]['Step1']:
global setup_prefix
setup_prefix = message.content
servers_setup[message.guild.id]['Step1'] = False
await message.channel.send("Now, mention the role you want to have admin rights")
servers_setup[message.guild.id]['Step2'] = True
if servers_setup[message.guild.id]['Step2']:
global setup_role
setup_role: Role = message.content
servers_setup[message.guild.id]['Step2'] = False
await message.channel.send("Now, mention the channel where do you want the logs to go into")
servers_setup[message.guild.id]['Step3'] = True
if servers_setup[message.guild.id]['Step3']:
global setup_channel
setup_channel: TextChannel = message.content
servers_setup[message.guild.id]['Step3'] = False
await message.channel.send("Great, now I can take care of the rest!")
changeprefix(message, setup_prefix)
changeadmin(message, setup_role)
changelogs(message, setup_channel)
await message.channel.send("Everything was configured. Have a nice day")

第一个(setup_prefix(没有任何问题,但当我启动机器人时,第二个在控制台中给我带来了一个错误

SyntaxError: annotated name 'role_setup' can't be global

我不知道问题出在哪里…

问题可以简化为

def foo():
global bar
bar:int = 1

当运行时,你会得到

File "test.py", line 3
bar:int = 1
^
SyntaxError: annotated name 'bar' can't be global

来自PEP 526-变量注释的语法,当不允许注释时:

试图注释受全局或在相同的函数范围内是非局部的。。。原因是全球和非局部不拥有变量;因此,类型注释属于在拥有变量的范围中。

您在脚本顶部的变量范围中进行了注释。无需在函数中重试。只需将该代码更改为

if servers_setup[message.guild.id]['Step2']:
global setup_role
setup_role = message.content

最新更新