You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py命令如何正确接收两个参数实现字符串count计数功能

问题根源

Discord.py 默认以空格为分隔符拆分命令后的输入内容,按顺序对应你定义的参数。你输入的count i love you so much love会被拆分为6个独立片段,前两个片段i和love会分别赋值给par和par2,剩下的内容因为没有对应接收参数被直接丢弃,因此统计结果不符合预期。

解决方案

方案一:不修改代码,调整输入规则

只需要告知用户,输入包含空格的长文本参数时用双引号包裹即可,正确输入示例:
count "i love you so much" love
此时 Discord.py 会自动将引号内的完整内容识别为par,后续的love识别为par2,即可得到正确统计结果。

方案二:修改代码,适配无引号输入习惯

如果希望用户不需要手动加引号就能直接输入,可以调整代码逻辑,先统一接收所有输入内容,再按最后一个空格拆分出「待统计文本」和「目标关键词」,修改后代码如下:

@commands.command()
async def count(self, ctx, *, input_content: str):
    # 查找最后一个空格的位置,拆分两个参数
    split_pos = input_content.rfind(' ')
    if split_pos == -1:
        await ctx.send("输入格式错误,请按照 `count 待统计文本 目标关键词` 格式输入")
        return
    par = input_content[:split_pos]
    par2 = input_content[split_pos+1:]
    x = par.count(par2)
    emBed = discord.Embed(title="try count", description="", color=0x6F9DC3)
    emBed.add_field(name="Output", value=f'text = "{par}"\nx = text.count({par2})\nprint(x)')
    emBed.add_field(name="Result", value=str(x))
    await ctx.channel.send(embed=emBed)

修改后用户直接输入count i love you so much love即可正常运行,系统会自动将i love you so much作为待统计文本,love作为目标关键词,返回统计结果为1,符合预期。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:54:07