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

Chaquopy调用Python脚本报错AttributeError: module 'script' has no attribute 'mainTextCode' 求助

Chaquopy调用Python脚本报错AttributeError: module 'script' has no attribute 'mainTextCode' 求助

看起来你在Chaquopy和Flutter的集成上踩了几个常见的坑,我来一步步帮你理清问题并解决:

一、先解决你遇到的AttributeError问题

你之前碰到的AttributeError: module 'script' has no attribute 'mainTextCode',本质原因只有两种可能:

  • 你的script.py文件里根本没定义mainTextCode这个函数/变量,但你在代码里尝试调用了它;
  • 函数名拼写错误——比如你在Python脚本里写的是main_text_code(下划线命名),但在Flutter里调用的是驼峰式的mainTextCode,大小写或格式不匹配导致找不到属性。

如果当时你是想通过模块导入的方式调用Python逻辑,正确的做法是:

  1. 把script.py放在android/app/src/python目录下(Chaquopy会自动识别这个目录下的文件为Python模块);
  2. 在script.py里明确定义mainTextCode函数,并且返回Flutter能解析的格式:
import random

def mainTextCode():
    # 返回一个包含textOutput的字典,和你Flutter代码里的解析逻辑对应
    return {"textOutput": str(random.randint(1, 100))}
  1. 在Flutter里用invokeMethod调用这个模块函数,而不是executeCode:
final result = await Chaquopy.invokeMethod("script", "mainTextCode");

二、针对你当前的executeCode方案优化

看你现在的代码改成了从assets加载placeholder.py并直接执行,这里有个关键问题:你的Python脚本只定义了get_random_number函数,但没有执行它也没有返回预期的结果格式,导致Flutter里拿到的result不是你想要的带textOutput的Map。

修改你的placeholder.py,确保最后返回包含textOutput的字典:

import random

def get_random_number():
    return random.randint(1, 100)

# 执行函数并构造Flutter期望的返回结构
output_dict = {"textOutput": str(get_random_number())}
output_dict  # 这一行必须加!Chaquopy会把代码最后一行的表达式结果返回给Flutter

另外还要检查pubspec.yaml里是否正确声明了assets路径,确保Flutter能加载到这个脚本:

flutter:
  assets:
    - assets/python/

三、额外的注意事项

  1. Chaquopy的两种用法区分:
    • 模块导入(invokeMethod):适合复杂的Python项目,支持多脚本依赖,脚本放在android/app/src/python;
    • 直接执行代码(executeCode):适合简单的代码片段,脚本可以放在assets里,但要注意代码的执行结果要符合预期格式。
  2. 文件名和模块名的大小写:Android系统是区分文件名大小写的,比如Script.py和script.py会被识别成两个不同的模块,一定要保持一致。

这样修改后,你应该就能正常调用Python函数并获取随机数结果了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:19:50