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

传感器数值可打印但无法显示在图表,报NameError错误求助

问题根源

你用global声明的result变量没有预先在全局作用域定义,若plot()方法执行时机早于onAccelerationChange()的第一次触发,全局作用域内还没有创建result变量,就会抛出未定义错误。另外在类方法中使用全局变量本身不符合封装规范,容易出现变量冲突、多实例互相干扰的问题。

最优解决方案(推荐)

改用类实例属性存储角度值,既避免全局变量污染,也能保证取值安全:

  1. 在类的__init__初始化方法中预先给角度属性设置默认值,避免未定义问题
def __init__(self):
    # 保留原有初始化代码,新增以下行
    self.current_angle = 0.0
  1. 修改onAccelerationChange方法,删除全局变量声明,改为给实例属性赋值,同时补充除以零的异常防护:
def onAccelerationChange(self, acceleration, timestamp):
    xA = float(acceleration[0])
    xZ = float(acceleration[2])
    # 避免Z轴加速度为0时出现除以零报错
    if abs(xZ) < 1e-6:
        xAngle = 0.0
    else:
        xAngle = xA / xZ
    rads = math.atan(xAngle)
    self.current_angle = math.degrees(rads)
  1. 修改plot方法的角度取值逻辑,直接读取实例属性即可:
def plot(self):
    # 原有绘制载荷柱图的代码全部保留,仅修改角度拼接行
    Angle = "Angle: " + str(self.current_angle) + "°"  
    self.text['text'] = Angle
    # 剩余画布刷新代码不变

若坚持使用全局变量的临时解决方案

在你的代码最顶部(所有类/函数定义之外)预先声明全局变量的初始值:

# 代码开头新增
result = 0.0

同时需要在plot方法开头也加上global result声明,才能正常读取全局变量的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:02