麻烦变量。 [蟒蛇]

时间:2010-09-03 21:17:06

标签: python windows

我在代码的开头有这个变量:

enterActive = False

然后,最后,我有这个部分:

def onKeyboardEvent(event):
    if event.KeyID == 113: # F2
        doLogin()
        enterActive = True
    if event.KeyID == 13:  # ENTER     
        if enterActive == True:
            m_lclick()        
    return True

hookManager.KeyDown = onKeyboardEvent
hookManager.HookKeyboard()
pythoncom.PumpMessages()

当我先按Enter键并且先按F2键时出现此错误:

UnboundLocalError: local variable 'enterActive' referenced before assignment

我知道为什么会这样,但我不知道如何解决它......

5 个答案:

答案 0 :(得分:6)

Global variables in Python。在onKeyboardEvent内,enterActive当前是指局部变量,而不是您在函数外定义的(全局)变量。你需要把

global enterActive

在函数的开头使enterActive引用全局变量。

答案 1 :(得分:2)

方法1 :使用局部变量。

def onKeyboardEvent(event):
    enterActive = false
    ...

方法2 :明确声明您正在使用全局变量enterActive

def onKeyboardEvent(event):
    global enterActive
    ...

因为函数enterActive = True中有onKeyboardEvent行,所以函数中对enterActive的任何引用都默认使用局部变量,而不是全局变量。在您的情况下,局部变量在使用时未定义,因此是错误。

答案 2 :(得分:1)

enterActive = False

def onKeyboardEvent(event):
    global enterActive
    ...

答案 3 :(得分:0)

也许这就是答案:

Using global variables in a function other than the one that created them

您正在写一个全局变量,并且必须声明您知道 通过在开头添加“全局enterActive”你正在做什么 你的职能:

def onKeyboardEvent(event):
    global enterActive
    if event.KeyID == 113: # F2
        doLogin()
        enterActive = True
    if event.KeyID == 13:  # ENTER     
        if enterActive == True:
            m_lclick()        
    return True

答案 4 :(得分:0)

也许您正在尝试在另一个函数中声明enterActive而您没有使用全局语句使其成为全局函数。在声明变量的函数中的任何位置,添加:

global enterActive

这将在函数内声明它为全局。