【问题标题】:Missing len() within sqlite querysqlite 查询中缺少 len()
【发布时间】:2021-08-05 15:58:08
【问题描述】:

我一直在尝试根据经验对用户进行排名,尽管在调用命令排名时,我似乎收到了缺少 len() 的类型错误

错误:命令引发异常:TypeError:'sqlite3.Cursor' 类型的对象没有 len()

我正在调用一个帮助类(虽然这也是我第一次使用类)并且在其中调用了 len,这给了我一个错误。

感谢大家的帮助!

class HelpMenu(ListPageSource):
    def __init__(self, ctx, data):
        self.ctx = ctx
        super().__init__(data, per_page = 10)

    async def write_page(self, menu, fields=[]):
         offset = (menu.current_page * self.per_page) + 1
         len_data = len(self.entries)

         embed = Embed(title="Server XP Leaderboard",
                       colour=self.ctx.author.colour)
         embed.set_thumbnail(url = self.ctx.guild.icon_url)
         embed.set_footer(text = f"{offset:,} - {min(len_data, offset+self.per_page-1):,} of {len_data:, } members.")

         for name, value in fields:
             embed.add_field(name=name, value=value, inline=False)
         return embed

    async def format_page(self, menu, entries):
        fields = []

        for idx, entry in enumerate(entries):
            fields.append(("Ranks", "\n".join(f'{idx}. {entry[0]} (XP: {entry[1]} | Level: {entry[2]})')))

            return await self.write_page(menu, fields)


class Exp(Cog):
    def __init__(self, bot):
        self.bot = bot

    @command(aliases = ['lvl', 'level'])
    async def rank(self, ctx):

        db = sqlite3.connect('xpdata.db')
        cursor = db.cursor()

        # user_id = self.author.id
        guild_id = ctx.guild.id
        #
        # cursor.execute(f'SELECT * FROM xpdata WHERE user_id = {user_id}  AND guild_id = {guild_id}')
        # for row in cursor.fetchall():
        #     level_display = row[3]

        xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')

        #menu
        ranking_menu = MenuPages(source=HelpMenu(ctx, xp_ranking))
        await ranking_menu.start(ctx)

        #await ctx.channel.send('{} is currently level {} and rank {}'.format(ctx.author.mention, level_display))

【问题讨论】:

    标签: python sqlite discord.py typeerror


    【解决方案1】:

    您没有获取查询到的结果。

    更正这一行:

     xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
    

    cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
    xp_ranking = cursor.fetchall()
    

    【讨论】:

    • @Barmar 哦,是的,你是对的。我想在一条线上变得聪明...坏主意-.-(我编辑了我的帖子)
    • 不幸的是,流畅的接口在 Python 中并不常见。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2021-02-23
    • 2015-05-12
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多