Python не удается проверить, находится ли значение в списке - PullRequest
2 голосов
/ 19 июня 2020

Итак, у меня есть этот фрагмент кода, который выбирает каждую строку в столбце userID, помещает возвращаемое значение в словарь, а затем печатает его.

whitelist = []            

with db.cursor() as cursor:
    whitelist_get = "SELECT userID FROM whitelist;"
    cursor.execute(whitelist_get)
    whitelist = str(cursor.fetchall())
    print(whitelist)

И этот фрагмент кода проверяет, соответствует ли идентификатор автора из Discord находится в этом белом списке.

async def _function(ctx):
    global whitelist
    if ctx.message.author.id in whitelist:
        print("access granted")
    else:
        print("access not granted")

Однако при запуске скрипта код выходит за global whitelist и не обрабатывается ни в операторе if, ни в операторе else. Он просто ничего не делает. Он тоже ничего не печатает. Я делаю что-то не так?

EDIT: Мой идентификатор автора находится в таблице MySQL, и он должен печатать access granted, но он вообще ничего не печатает.

EDIT2: Решено изменив if ctx.message.author.id in whitelist: на if str(ctx.message.author.id) in whitelist:

1 Ответ

2 голосов
/ 19 июня 2020

Метод fetchall возвращает последовательность кортежей, поэтому вам следует распаковать кортежи, чтобы сначала извлечь первые элементы. Для эффективного поиска вы можете вместо этого добавить набор в белый список:

whitelist = {id for (id,) in cursor.fetchall()}
...