discord.py开发Discord机器人后台循环任务报'tuple'对象无set_author属性错误
核心报错触发原因
你遇到的AttributeError: 'tuple' object has no attribute 'set_author',是踩了Python隐式元组语法的坑:
- 代码里给
channel、embed赋值的两行,行尾多了个英文逗号。Python语法里,任何表达式后面只要跟逗号,就会自动把这个值封装成单元素元组,不会按预期把对象本身赋值给变量。
也就是说当前代码里的embed根本不是discord.Embed实例,是一个装着Embed对象的元组——元组本身没有set_author方法,直接触发属性不存在的报错。 - 代码里还埋了几个会导致后续运行失败的隐藏问题:
- 多处字段取值的时候把变量
response拼错成了respons,执行到这几行取值逻辑时会报变量未定义、字段不存在的错误 - 堆栈里提到的
str2是不存在的调用方法,说明本地实际运行的代码版本和贴出来的内容有差异:要么是对应行手滑把内置的str()写成了str2,要么是跑了未保存的旧草稿代码,需要核对bot.py对应行的实际内容 - 现在写的
url = 'API'是占位字符串,运行到aiohttp请求环节会因为URL格式非法报错
- 多处字段取值的时候把变量
具体修复操作
- 删掉
channel = client.get_channel(809881992367702117),行尾多余的逗号,让channel变量直接存储拿到的频道对象 - 删掉
embed = discord.Embed(...)整块定义行尾的多余逗号,让embed变量直接存储Embed实例 - 把所有拼写错误的
respons修正为response,调整dailyTested、activeCase两处的取值逻辑 - 把占位的
'API'替换成真实可访问的疫情数据接口地址 - 核对
embed.set_author()对应行的代码,确保调用的是内置str()做类型转换,不存在手滑写错的str2
内容的提问来源于stack exchange,提问作者DiabloStudio
相关产品推荐
相关产品推荐

