函数中未定义python变量

2024-10-02 18:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于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)

Tags: and函数if状态statusprintmysqldbreading
3条回答

你应该学会在不丢失错误的情况下删去代码的一部分并简化它。这样你就能把错误搞定。在

最终您将得到这样的代码:

status = 0

def f():
    print(status)

f()
Out: 0

正如预期的那样,函数找不到status,因此它在全局范围内查找,找到并打印它。在

^{pr2}$

又如所料。我们已经为f定义了一个局部变量status,因此f在打印时就使用它。在

status = 0

def f():
    print(status)
    status = 1

f()
UnboundLocalError: local variable 'status' referenced before assignment

现在很清楚为什么会有错误。与第二个示例的唯一区别是,我们交换了顺序,以便只有在print中使用status才在f中定义{},与第一个示例的唯一区别是我们在f中定义了status。所以这就是问题所在:当我们在函数内部定义变量时——在函数内部的任何地方——Python决定该变量必须是函数的局部变量。所以当它命中print函数时,它会寻找一个局部变量status,但它还没有被定义。因此出现了错误。类似于运行以下代码:

print(status)
status = 1
NameError: name 'status' is not defined

一个解决方案是引入status作为全局。在

status = 0
previousStatus = 0
# other code
def roomControl(name, demand, thermostat, roomTemp):
    global status
    global previousStatus
    #  This will bring in both variables to be edited within the function

祝你好运!在

这是相关的全局、局部变量类型。你可以在这里找到https://www.programiz.com/python-programming/global-keyword解释。在

您只需将“状态”定义为全局。在

相关问题 更多 >