如何解决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-变量注释的语法,When annotations aren't allowed:
尝试注释受全局或全局变量影响是非法的 在同一函数范围内是非局部的...原因是全局和 非局部变量没有自己的变量;因此,类型注释属于 在拥有该变量的范围内。
您在脚本顶部的变量范围内进行了注释。无需在函数中再次尝试。只需将这段代码更改为
if servers_setup[message.guild.id]['Step2']:
global setup_role
setup_role = message.content