You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Discord.py bot中通过GSpread校验用户是否已注册?

解决Discord.py机器人结合GSpread校验用户时的异常问题

我一眼就看出问题所在啦——你用的gspreadfind()方法,在找不到匹配内容的时候不会返回None,而是会直接抛出CellNotFound异常,这就是为什么删除用户名后代码会崩溃的原因!原来的if/else逻辑根本没机会处理“找不到”的情况,因为异常直接打断了代码执行。

下面给你两种靠谱的解决思路:


方法1:用try-except捕获异常

这是最直接适配你原有逻辑的方式,专门捕获find()抛出的异常,在异常分支里处理“用户未找到”的情况:

from gspread.exceptions import CellNotFound

@bot.command()
async def finduser(message):
    user = message.author.name + message.author.discriminator
    print(user)
    try:
        findUser = sheet.find(user, in_column=3)
        print("User found!")
    except CellNotFound:
        print("User not found!")

方法2:改用findall()方法

findall()方法在找不到匹配项时会返回一个空列表,空列表在布尔判断里等价于False,这样就能用你原来的if/else逻辑了:

@bot.command()
async def finduser(message):
    user = message.author.name + message.author.discriminator
    print(user)
    findUsers = sheet.findall(user, in_column=3)
    if findUsers:  # 空列表会被判定为False
        print("User found!")
    else:
        print("User not found!")

两种方法都能解决你的问题,选哪个看你自己的习惯~如果只需要匹配单个用户,两种都没问题;如果可能有多个重复用户名,findall()还能帮你拿到所有匹配结果。

内容的提问来源于stack exchange,提问作者ekalb2020

火山引擎 最新活动