如何在命令功能中获得增加的计数器?例如:
global counter
counter = 0
@client.command(pass_context=True)
async def pick(ctx):
counter += 1
每次我尝试这样做时,它都会给我这个错误: UnboundLocalError:分配前引用的局部变量'counter' 我已经尝试了很多方法来实现这个目标,但我无法想象它能挽救我的生命以及我所爱的人。
答案 0 :(得分:1)
有几种方法可以实现你想要的东西。
正如你在hopethatsacleanwet的回答中所提到的那样,你只需要全局变量名,这样你就可以访问全局范围而不是本地范围。
@client.command()
async def pick():
global counter
counter += 1
正如benjin的回答所提到的,你也可以使用cog将变量绑定到函数可以访问的范围。
class MyCog:
def __init__(self, bot):
self.bot = bot
self.counter = 0
@commands.command()
async def pick(self):
self.counter += 1
def setup(bot):
bot.add_cog(MyCog(bot))
你甚至可以将计数器绑定到机器人
client.counter = 0
@client.command()
async def pick():
bot.counter += 1
我建议你阅读python's namespaces
答案 1 :(得分:0)
您可以尝试使用self.counter
创建一个cog。您可以通过创建一个包含Class的单独文件,在底部创建一个setup
函数,然后在运行bot的主代码中使用load_extension
来完成此操作。下面的示例代码。
<强> bot.py 强>
from discord.ext import commands
client = commands.Bot(command_prefix='!')
client.load_extension('cog')
client.run('TOKEN')
<强> cog.py 强>
from discord.ext import commands
class TestCog:
def __init__(self, bot):
self.bot = bot
self.counter = 0
@commands.command()
async def pick(self):
self.counter += 1
await self.bot.say('Counter is now %d' % self.counter)
def setup(bot):
bot.add_cog(TestCog(bot))
答案 2 :(得分:0)
发生错误的原因是因为Python试图在counter
命令中的本地范围内定义pick
。为了访问全局变量,您需要在本地上下文中将其“重新定义”为全局变量。将pick
命令更改为此将修复它:
@client.command(pass_context=True)
async def pick(ctx):
global counter
counter += 1