使用Python(Discord.py)跨文件调用函数时遇错误求助
解决Discord.py跨文件函数调用的语法与变量问题
咱们直接针对你遇到的两个核心问题来修复:
1. 启动时的SyntaxError(config.py第24行)
你写的这一行完全不符合Python语法规范:
return color = embeds.colors. + color
这里有两个致命问题:
- return语句不能直接嵌套赋值:Python不允许在return后面直接写
变量=值的表达式,你需要先获取颜色值,再用它来构建Embed。 - 多余的点号:
embeds.colors. + color里多了一个无意义的.,这会直接触发语法错误。如果embeds.colors是存颜色属性的模块/类(比如embeds.colors.red),用getattr动态获取;如果是字典,就用键取值。
2. 命令执行时的UnboundLocalError
你的standard函数里写了三个return,但Python函数只要执行到第一个return就会立刻终止,后面创建Embed、设置Footer的代码根本不会运行!这就导致你在_8ball命令里调用这个函数时,根本拿不到返回的embed对象,自然会报“变量未定义”的错误。
修复后的standard函数代码
把函数改成这样,两个问题都能解决:
def standard(title, desc, color): # 动态获取颜色值:假设embeds.colors里是discord.Color类型的属性 color_value = getattr(embeds.colors, color) # 创建Embed对象 embed = discord.Embed(title=title, description=desc, color=color_value) # 设置Footer embed.set_footer(text=embeds.settings.footer) # 最后统一返回配置好的Embed return embed
命令里的正确调用方式
在_8ball命令中,要正确接收函数返回的embed对象:
async def _8ball(ctx): # 替换成你实际的标题、描述、颜色参数 embed = embeds.definitions.standard(title="8Ball结果", desc="这是测试描述", color="blue") await ctx.send(embed=embed)
额外注意事项
- 确保
embeds.colors里确实存在你传入的color参数对应的属性(比如blue对应discord.Color.blue()或预定义的十六进制颜色值)。 - 如果
embeds.colors是字典结构,就把getattr(embeds.colors, color)改成embeds.colors[color]。
内容的提问来源于stack exchange,提问作者def750
相关产品推荐
相关产品推荐

