赋值前引用的局部变量,但变量是全局变量

时间:2016-10-19 09:48:56

标签: python-3.x

我有一些代码并且我已将变量指定为全局变量,但在尝试将变量用作单独函数中的验证时,它会抛出异常。

这是未完成的代码(我知道它目前无法正常工作,但我想先解决这个问题)对于一些学校的作业,我知道有可能更有效率来实现我的目的但我想知道为什么这不起作用。

def mainFunc():
    nameList = []
    print("1. Add name \n2. Display list \n3. Quit\n")
    choice = displayMenu()
    if choice == 1:
       addName()

    elif choice == 2:
    displayList()

    else:
        print("Program Terminating")

def displayMenu():
    global answer
    answer = int(input("Please enter your choice: "))
    answerCheck()

def answerCheck():
    if answer == 1 or answer == 2 or answer == 3:
        return(answer)
    else:
        answer = input("Invalid selection, please re-enter: ")
        answerCheck()

def addName():
    position = int(input("Please enter the position of the name: "))
    name = input("Please enter the name you wish to add: ")
    remove = nameList[position-1]
    nameList.remove(remove)
    nameList.add(name,position)
    print(nameList)



mainFunc()

1 个答案:

答案 0 :(得分:1)

Python将变量answer视为局部变量,就像在answerCheck()函数中一样,在else子句下,对变量answer进行了赋值。由于本地范围内涉及赋值,因此python将变量视为本地范围,这就是您的问题所在。只要您不在函数中使用赋值,就会读取全局变量。

您可以通过注释掉行answer = input("Invalid selection, please re-enter: ")并调用该函数来对此进行测试。它应该工作正常。

为了让您的代码正常工作,让python知道您在global answer函数中使用answerCheck()引用了全局变量。