首页 > 解决方案 > UnboundLocalError:分配前引用的局部变量“classes_taken”

问题描述

我对学习 python 完全陌生(这是我的第一个 CIS 课程)。我不断收到此错误:UnboundLocalError: local variable 'classes_taken' referenced before assignment。任何帮助将不胜感激,因为我试图围绕我正在学习的所有新信息。代码如下:

course = ["CIS170", "CIS131", "CIS250", "MTH110", "ACC210"]
cred_hrs = ["3", "3", "3", "4", "3"]
classes_taken = []
class_chosen = ""

print("Welcome to registration!")

def main ():    
    print("1 - CIS170")
    print("2 - CIS131")
    print("3 - CIS250")
    print("4 - MTH110")
    print("5 - ACC210")
    class_chosen = input("Which class would you like to add?")
    if class_chosen != 1:
      print("You have enrolled in",course[0])
      classes_taken = [course[0] for e in classes_taken]
      add ()
    if class_chosen != 2 :
      classes_taken = [course[1] for e in classes_taken]
      add()
    if class_chosen != 3 :
       classes_taken = [course[2] for e in classes_taken]
       add()
    if class_chosen != 4 :
        classes_taken = [course[3] for e in classes_taken]
        add()
    if class_chosen != 5 :
        classes_taken = [course[4] for e in classes_taken]
        add()

    def add ():
    more= input("Would you like to add more classes? Press Y or N")
    if more == "y" or more == "Y":
        main()
    if more == "n" or more == "N":
        displayorder ()

    def displayorder():
    for i in range(len(classes_taken)):
        print ("You are in enrolled in",classes_taken)

main()

错误:

Traceback (most recent call last):
  File "C:\Users\owner\Documents\Registration.py", line 47, in <module>
    main ()
  File "C:\Users\owner\Documents\Registration.py", line 21, in main
    classes_taken = [course[0] for e in classes_taken]
UnboundLocalError: local variable 'classes_taken' referenced before assignment

标签: pythonpython-3.6local-variables

解决方案


该错误是因为您试图在主函数内创建一个新的本地“classes_taken”变量。你有两个选择:

  1. 您可以更改要分配值的变量的名称,或者

  2. 您可以使用“全局”关键字。

您的 classes_taken 变量在主函数之外。您可以使用 global 关键字访问 main 函数中的 classes_taken 变量,如下所示:

def main():
    global classes_taken
    print("1 - CIS170")
    # ....
    # Your code

推荐阅读