python - 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
推荐阅读
- python - 按子字典的值对字典字典进行排序/排序
- logging - “使用 First/FirstOrDefault/Last/LastOrDefault 操作而不使用 OrderBy 和过滤器...”警告的调用堆栈?
- mysql - 将行转换为列 - 连接问题
- docker - 如何在 Docker 容器中指定已挂载设备的用户和组所有者?
- python - python数据透视表中的总和不正确
- python-3.x - 如何从 Python 中的字符串中删除正斜杠 (\)?
- android-studio - AAPT:错误:找不到属性 argType(又名 com.example.aplikasiforensik:argType)
- javascript - 如何在 pupperteer js 中获取开发控制台命令,如“document.getElements”
- flyout - 块状弹出滚动条
- javascript - 如何在没有变音符号转换的情况下读取类型为 email 的输入字段的原始值?