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

discord.py中send()参数错误求助:传入3个参数但仅支持1-2个

解决discord.py中send()参数过多的TypeError问题

嘿,这个问题我之前写discord机器人的时候也踩过一模一样的坑!咱们来一步步捋清楚问题根源和解决办法:

错误原因

你给出的代码片段:

test = input("Write something:")
await message.channel.send("You wrote:", test)

之所以抛出TypeError: send() takes from 1 to 2 positional arguments but 3 were given,核心问题在于:discord.py的TextChannel.send()方法,仅接受1个手动传入的位置参数(也就是要发送的核心内容content,剩下的参数(比如嵌入消息、文件等)都必须用关键字参数传递。

你这里传了两个位置参数("You wrote:"test),再加上Python自动传递的方法实例本身(self参数),总共就凑成了3个位置参数,超出了方法的参数限制,所以触发了错误。

正确的修复写法

有几种简单直观的方式可以解决这个问题,推荐用最简洁的f-string写法:

方法1:使用f-string拼接内容(强烈推荐)

这是Python 3.6+最常用的字符串格式化方式,可读性拉满:

test = input("Write something:")
await message.channel.send(f"You wrote: {test}")

方法2:使用字符串format方法

如果你的Python版本低于3.6,可以用这种兼容写法:

test = input("Write something:")
await message.channel.send("You wrote: {}".format(test))

方法3:直接用加号拼接字符串

这种方式要注意,如果test不是字符串类型,需要先转成字符串(比如str(test)):

test = input("Write something:")
await message.channel.send("You wrote: " + test)

额外小提示

之后如果需要发送嵌入消息、文件这类附加内容,一定要用关键字参数传递,比如:

await message.channel.send(content="这是普通文本内容", embed=my_custom_embed)

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

火山引擎 最新活动