我正在努力调试并解决此错误。基本上,我有一个变量(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
答案 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)))