无法从永无止境的循环访问Python全局变量

时间:2020-07-23 04:49:33

标签: python list variables

我本该很简单的事情遇到很多麻烦,但我无法使其正常工作。

我有以下函数在其自己的线程上永远循环。我需要从另一个函数中编辑该函数中的一些变量。

这始终在检查DS18B20温度传感器并记录最小/最大温度。这些是我需要从其他函数访问并重置的一些变量。

def getTemp():
while True:
    try:
        i = 0
        # count how many ds18b20s are found
        for sensor in W1ThermSensor.get_available_sensors():
            i = i + 1

        global temperatures
        # setup arrays
        IDs = [0]*i  
        temps = [0]*i
        minTemp = [0]*i
        maxTemp = [0]*i
        i = 0  # reset counter

        for sensor in W1ThermSensor.get_available_sensors():
            prevTemps[i] = temps[i]
            IDs[i] = sensor.id  # get IDs
            temps[i] = (sensor.get_temperature(W1ThermSensor.DEGREES_F))  # get temps
            temps[i] = (round(temps[i], 2))  # round
            if temps[i] > maxTemp[i]:
                maxTemp[i] = temps[i]
                saveDs18b20Max(maxTemp[i],IDs[i])
            if temps[i] < minTemp[i]:
                minTemp[i] = temps[i]
                saveDs18b20Min(minTemp[i],IDs[i])

            i = i + 1  # count

        temperatures = temps[:]
    
    except:
        print('error')

以上方法效果很好,但我无法访问任何变量。我添加了全局温度变量,然后将临时列表的内容复制到该变量,但是当我从另一个函数调用它时,出现以下错误。

NameError:未定义名称“温度”

这是我尝试打印温度的功能。

def resetMin(addr):
     print("resetMin")
     print(addr)
     print(temperatures)

我使用Visual Studio Code,并且就温度而言,它是全局的,因为在我调用它时不会显示错误。

谢谢

2 个答案:

答案 0 :(得分:0)

首先,您应该尝试在方法之外声明温度,然后声明全局原因,因为global仅告诉您您不是在创建局部方法变量,而是在使用全局变量。使温度超出方法范围。

因此,为此编辑最后一个方法。

def resetMin(addr):
   global temperatures
   print("resetMin")
   print(addr)
   print(temperatures)

答案 1 :(得分:0)

建议引发一个类C,该类包含要在循环中操作并通过另一种方法访问的数据。

class C:
    def __init__(self):
        self.temperatures=0

def getTemp(c):
while True:
    try:
        #...
        # hanlde c.temperatures
    except:
    sleep(0.1)
def resetMin(addr, c):
    # hanlde c.temperatures
c=C()
# thread.start_new_thread(getTemp,(c,))
# thread.start_new_thread(resetMin,('addr1',c,))