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

如何修复Pepper人脸识别成功后二次交互的变量报错问题

完整报错日志:
[ERROR] behavior.box :_safeCallOfUserMethod:125 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11199696904:/second_interaction_20/get_data_7: Traceback (most recent call last): File "/opt/aldebaran/lib/python2.7/site-packages/albehavior.py", line 113, in _safeCallOfUserMethod func(functionArg) File "", line 152, in onInput_onStart UnboundLocalError: local variable 'Gender_user' referenced before assignment

错误原因

你遇到的两类报错均由Python变量作用域规则和Choregraphe box的独立运行上下文特性共同导致:

  1. UnboundLocalError:在当前get_data box的onInput_onStart方法内,你先读取了Gender_user变量,后续代码又对该变量做了赋值操作,Python解释器会默认将其判定为局部变量,赋值前读取就会触发该错误。
  2. 后续尝试定义全局变量出现的NameError:Choregraphe中每个Python box的脚本都运行在独立上下文,Python原生的global关键字仅能作用于单个box的脚本内部,无法实现同行为下跨box的变量共享,新box内声明global Gender_user但上下文无该变量定义就会触发报错。
解决方案
  • 先修复单box内的UnboundLocalError:如果变量仅在当前box内使用,要么在onInput_onStart方法最开头先给变量赋初始值,要么在方法第一行就添加global声明,不要在方法中间加声明,也不要出现先读变量后赋值的逻辑,示例:

    def onInput_onStart(self):
        global Gender_user # 放在方法第一行
        # 后续业务逻辑
        Gender_user = "male" # 赋值操作放在读取逻辑之前
    
  • 跨box共享变量不要用Python原生global,用Choregraphe官方提供的两种持久化存储方案:

    1. 用ALMemory存储自定义键值对
      存储侧(人脸识别成功的box)代码:
    import ALProxy
    mem = ALProxy("ALMemory")
    # 自定义键名建议带上你的行为前缀,避免和系统键冲突
    mem.insertData("MySecondInteraction/GenderUser", 人脸识别返回的性别值)
    

    读取侧(第二个交互的get_data box)代码:

    import ALProxy
    mem = ALProxy("ALMemory")
    # 第二个参数为读取失败时的默认值,可避免无数据时的报错
    Gender_user = mem.getData("MySecondInteraction/GenderUser", "unknown")
    
    1. 用行为级全局参数存储
      右键你的行为根节点,选择「Add new parameter」,命名为GenderUser,选择对应数据类型,所有同行为下的box都可以直接读写:
    # 存值
    self.behavior().setParameter("GenderUser", 人脸识别返回的性别值)
    # 取值
    Gender_user = self.behavior().getParameter("GenderUser")
    
  • 若仅需要前序box把数据传递给相邻的后序box,直接给box添加输出/输入端口连线即可,不需要额外存储全局变量。


内容的提问来源于stack exchange,提问作者Diego Fedele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:48:03