我需要一些关于python变量的帮助。我有一个草图,它将变量发送到一个名为roomControl的函数。如果在这个功能期间,状态与以前有所不同,那么我希望它做些什么。目前它应该打印出变量值。在
我得到一个错误,状态变量没有被分配,我相信这是由于它被设置在函数之外。但是如果我在函数中设置变量,那么这将覆盖这些变量的函数控制。(希望这有道理)
我的脚本如下,但基本上,如果状态改变,然后打印出来的东西是我要实现的
import MySQLdb
status = 0
previousStatus = 0
connSolar = MySQLdb.connect("localhost", "######", "#######", "######")
cursSolar = connSolar.cursor()
def roomControl(name, demand, thermostat, roomTemp):
if demand == 1 and thermostat > roomTemp:
status = 1
if demand == 1 and thermostat < roomTemp:
status = 0
if demand == 0:
status = 0
if (status == 1 and previousStatus == 0):
print("Room: %s, Heating demand = %s, Thermostate = %s, Room Temp = %s, Status = %s") % (name, demand, thermostat, roomTemp, status)
print("")
previousStatus = status
return (status)
while 1:
Ntemp = 25
try:
cursSolar.execute ("SELECT * FROM roomHeatingControl")
connSolar.commit()
for reading in cursSolar.fetchall():
Nthermostat = reading[6]
NSW = reading[7]
except (MySQLdb.Error, MySQLdb.Warning) as e:
print (e)
NPy_status = roomControl('Niamh', NSW, Nthermostat, Ntemp)
你应该学会在不丢失错误的情况下删去代码的一部分并简化它。这样你就能把错误搞定。在
最终您将得到这样的代码:
正如预期的那样,函数找不到
^{pr2}$status
,因此它在全局范围内查找,找到并打印它。在又如所料。我们已经为
f
定义了一个局部变量status
,因此f
在打印时就使用它。在现在很清楚为什么会有错误。与第二个示例的唯一区别是,我们交换了顺序,以便只有在},与第一个示例的唯一区别是我们在
print
中使用status
才在f
中定义{f
中定义了status
。所以这就是问题所在:当我们在函数内部定义变量时——在函数内部的任何地方——Python决定该变量必须是函数的局部变量。所以当它命中print
函数时,它会寻找一个局部变量status
,但它还没有被定义。因此出现了错误。类似于运行以下代码:一个解决方案是引入
status
作为全局。在祝你好运!在
这是相关的全局、局部变量类型。你可以在这里找到https://www.programiz.com/python-programming/global-keyword解释。在
您只需将“状态”定义为全局。在
相关问题 更多 >
编程相关推荐