[英]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_index
和sverify_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_index
和self.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.