簡體   English   中英

即使使用全局 python 也未定義變量

[英]Variable not defined even using global python

PYTHON 剛開始在 discord.py 中使用 cogs,所以我正在將我的代碼復制到 cogs 中,但之前有效的一件事在 cog 中不起作用,我無法弄清楚為什么。 下面的代碼示例。

    sverify_index=0
    sverify_msg_id=""
    @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)

目前我得到的錯誤是

line 19, in on_message
    sverify_index += 1
NameError: name 'sverify_index' is not defined

請幫忙。

基於縮進和self的存在,我認為你有類似的東西

class Something...:
    sverify_index=0
    sverify_msg_id=""
    @commands.Cog.listener()
    async def on_message(self, message):
         ...

這將使sverify_indexsverify_msg_id類級變量(由Something...的所有實例共享),而不是全局變量。

如果你真的希望它們成為全局變量,你可以這樣做

sverify_index = 0
sverify_msg_id = ""

class Something...:
    @commands.Cog.listener()
    async def on_message(self, message):
         global sverify_index, sverify_msg_id

使它們成為真正的全局變量。

正如 AKX 提到的,它們目前是定義的類級變量。 為了將它們作為全局變量,可以將它們移出 class。

另一種方法

由於問題不在於使它們成為全局變量,而是為什么在移動到 class 時無法訪問它們,另一種解決方案是將它們保留為類級變量,然后像self.sverify_indexself.sverify_msg_id一樣訪問它們。

所以解決方案如下

class Something(commands.Cog):
    ...

    sverify_index=0
    sverify_msg_id=""
    
    @commands.Cog.listener()
    async def on_message(self, message):
        if (message.channel.id == 888529033405530183 and 
            message.author.id != 887542628063780864):
        
            self.sverify_index += 1
            self.sverify_list = []
            self.sverify_list.append(self.sverify_index)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM