Python discord.py使用cog时声明global仍报变量未定义错误如何解决
问题根源
global关键字只能读取Python模块层级的全局变量,你声明的sverify_index和sverify_msg_id是写在Cog类内部的属性,不属于模块全局作用域,所以调用时会报未定义错误。
解决方法
方案1:改用Cog实例属性存储变量(更推荐,符合Cog封装逻辑)
把变量初始化放在Cog的__init__方法中,调用时加self.前缀访问,不需要声明global:
class 你的Cog类名(commands.Cog): def __init__(self, bot): self.bot = bot # 初始化实例属性 self.sverify_index = 0 self.sverify_msg_id = "" @commands.Cog.listener() async def on_message(self, message): if message.channel.id == 888529033405530183 and message.author.id != 887542628063780864: # 直接通过self访问实例属性 self.sverify_index += 1 sverify_list = [] sverify_list.append(self.sverify_index)
方案2:把变量移到模块全局作用域(不推荐,不符合封装规范)
如果要保留global用法,把两个变量的定义移到Cog类之外、整个py文件的顶层位置:
# 模块顶层定义全局变量 sverify_index=0 sverify_msg_id="" class 你的Cog类名(commands.Cog): def __init__(self, bot): self.bot = bot @commands.Cog.listener() async def on_message(self, message): if message.channel.id == 888529033405530183 and message.author.id != 887542628063780864: global sverify_index, sverify_msg_id sverify_index += 1 sverify_list = [] sverify_list.append(sverify_index)
内容的提问来源于stack exchange,提问作者pythonguy
相关产品推荐
相关产品推荐

