UnboundLocalError: local variable 'lvl' referenced before assignment (global не помогает)
global var
var = ...
это не помогает
- Пробовал делать так:
@bot.command()
async def rank(ctx, user: discord.Member = None):
emb = discord.Embed(title='Ранг')
if user == None:
user = ctx.message.author
for row in cursor.execute(f"SELECT xp,lvl FROM userinfo where id={user.id}"):
xp=row[0]
lvl = row[1]
need = (60*1.5)*lvl-(60*0.5)
emb.add_field(name='Уровень', value=f'{lvl}')
emb.add_field(name='Опыт', value=f'{xp}')
emb.add_field(name='Опыта до след. уровня', value=f'{need}')
await ctx.send(embed=emb)
Но этот вариант отправляет сообщение с заголовком и пустым содержанием.
Код:
@bot.command()
async def rank(ctx, user: discord.Member = None):
emb = discord.Embed(title='Ранг')
if user == None:
user = ctx.message.author
for row in cursor.execute(f"SELECT xp,lvl FROM userinfo where id={user.id}"):
xp=row[0]
lvl = row[1]
need = (60*1.5)*lvl-(60*0.5)
emb.add_field(name='Уровень', value=f'{lvl}')
emb.add_field(name='Опыт', value=f'{xp}')
emb.add_field(name='Опыта до след. уровня', value=f'{need}')
await ctx.send(embed=emb)
Полная ошибка:
Ignoring exception in command rank:
Traceback (most recent call last):
File "E:\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "E:\bot\bot.py", line 1524, in rank
emb.add_field(name='Уровень', value=f'{lvl}')
UnboundLocalError: local variable 'lvl' referenced before assignment
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 902, in invoke
await ctx.command.invoke(ctx)
File "E:\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 859, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "E:\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: UnboundLocalError: local variable 'lvl' referenced before assignment
Ответы (2 шт):
Автор решения: Alpensin
→ Ссылка
Такая ситуация будет возникать в случае, когда этот запрос
for row in cursor.execute(f"SELECT xp,lvl FROM userinfo where id={user.id}"):
Не возвращает ни одной строки. Тогда не будет выполняться код в цикле for.
Автор решения: vladrunk
→ Ссылка
А так пробовал?
@bot.command()
async def rank(ctx, user: discord.Member = None):
emb = discord.Embed(title='Ранг')
if user == None:
user = ctx.message.author
user_info = cursor.execute(f"SELECT xp,lvl FROM userinfo where id={user.id}")
if user_info:
xp=user_info[0]
lvl = user_info[1]
else:
# Какие-то первоначальные хар-ки
xp = 0
lvl = 1
need = (60*1.5)*lvl-(60*0.5),
emb.add_field(name='Уровень', value=f'{lvl}')
emb.add_field(name='Опыт', value=f'{xp}')
emb.add_field(name='Опыта до след. уровня', value=f'{need}')
await ctx.send(embed=emb)