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




