sqlite3 выдает значение, как список. Но python думает что он ничего не выдал и выдает ошибку. Как это исправить?
Код команды discord.py:
@commands.command()
async def welcome(self, ctx, arg: str = None, arg2: int = None, *, arg3: str = None):
try:
for value in cursor.execute(f"SELECT owner_id FROM servers WHERE id={ctx.guild.id}"):#получаю id овнера сервера из таблицы sqlite3
owner_id = value#записываю id в переменную
owner_id = re.sub("[(|)|,|']", "", str(owner_id))#убираю лишние символы, т.к. slite3 выдает список
owner_id = int(owner_id)
if ctx.author.id == owner_id:#сравниваю id автора с id в переменной
#дальше идет мой код
Но выдает ошибку:
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: UnboundLocalError: local variable 'owner_id' referenced before assignment
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У вас переменная создается в цикле, но если не будет итераций цикла, то она не будет создана, из-за чего и возникает та ошибка при попытке использовать переменную
Я бы убрал цикл, т.к. не может быть у вас несколько объектов с одним id, используя fetchone. А значения в запрос лучше привыкнуть передавать через параметры ?
Пример:
value = cursor.execute("SELECT owner_id FROM servers WHERE id=?", [ctx.guild.id]).fetch_one()
owner_id = value[0] if value else None
if ctx.author.id == owner_id:#сравниваю id автора с id в переменной
# дальше идет мой код
Но, в value будет None, если в таблице не будет сервера с указанным id, поэтому лучше предусмотреть вариант и проверять (поэтому добавил проверку value[0] if value else None)