Discord.py bot绝对令人困惑的问题

时间:2018-03-17 04:37:30

标签: python python-3.x discord.py

我正在努力调试并解决此错误。基本上,我有一个变量(maxID),当它在检查之前和之后都很清楚时,它认为它没有被初始化。它似乎只在我的add方法中执行此操作,因为它在我尝试的所有其他方法中都很好(我在代码中留下了调试打印,我可以确认DOES在ping方法中工作,证明maxID已初始化)。相关代码如下:

import discord
import asyncio
from discord.ext import commands

class Quote:
    def __init__(self, id, msg):
        self.id = id
        self.msg = msg

bot = commands.Bot(command_prefix = '-')

q = open("maxID.txt","r")
maxID = int(q.read())
q.close()

print(maxID)

temp = [0 for x in range(len(quotes))]
for i in range(0, len(quotes)):
    temp[i] = Quote(ids[i],quotes[i])
quotes = temp

@bot.event
async def on_ready():
    print('Logged in as')
    print(bot.user.name)
    print(bot.user.id)
    print('------')

@bot.event
async def on_message(message):
    await bot.process_commands(message)

@bot.command(pass_context=True)
async def ping(ctx):    
    await ctx.channel.send('Pong!')
    print(maxID)

@bot.command(pass_context=True)
async def add(ctx, *, arg):
    quotes.append(Quote(maxID, arg))
    maxID = maxID + 1
    await ctx.channel.send('Added Quote #' + str(len(quotes)))

旁注:上述报价中提及 maxID 时, add 之外,我可以确认工作正常,没有我能看到的问题。

我从add方法得到的确切错误:

Ignoring exception in command add:
Traceback (most recent call last):
  File "C:\Users\Acemcbean\AppData\Roaming\Python\Python36\site-packages\discord\ext\commands\core.py", line 62, in wrapped
    ret = yield from coro(*args, **kwargs)
  File "C:\IzunaBot\run.py", line 51, in add
    quotes.append(Quote(maxID, arg))
UnboundLocalError: local variable 'maxID' referenced before assignment

1 个答案:

答案 0 :(得分:0)

add命令中的maxID被解释为局部变量而不是全局变量。

This thread(特别是this answer)可能对您有用。

您可以更新添加命令,以将定义maxID的行包含为非局部变量作为修复:

@bot.command(pass_context=True)
async def add(ctx, *, arg):
    nonlocal maxID
    quotes.append(Quote(maxID, arg))
    maxID = maxID + 1
    await ctx.channel.send('Added Quote #' + str(len(quotes)))