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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:07:34