Python错误UnboundLocalError:在赋值之前引用了局部变量

2024-03-28 19:17:44 发布

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

我的问题: 在我的程序中,我有一个函数,只有当用户输入了几个值并保存在字典中时,才应该运行这个函数。我最初的想法是在函数中获取字典的长度,如果它是0(意味着它是空的),那就表示这些值还没有被输入。但是,当我运行代码时,我得到了这个错误'UnboundLocalError:localvariable'dictionary'referenced before assignment'。另一方面,当长度大于1(值已经输入)时,代码运行得很好。相关代码如下:

def displayValues(data):
    if len(data) == 0:
        print('No Values Found - Please Enter Values')
        Main()
    elif len(data) != 0:
        print()
        print('-'*77)
        for key,value in sorted(data.items()):
            print(key,':',value)
            print('-'*77)
        time.sleep(5)
        print()

def Main():
    while True:
        choice = displayMenu()
        if choice == 1:
            dictionary = setValues()
        elif choice == 2:
            displayValues(dictionary)
        elif choice == 3:
            runModel(dictionary)
        elif choice == 4:
            exportData()
        elif choice == 5:
            quit()

Main()

请注意,我确信返回dictionary变量中保存的值的setValues()函数的作用就像字典的len不是0一样代码运行良好。另外,我没有在代码中的任何地方使用变量名“dictionary”,因此它不会被重复。 如果你能告诉我哪里出错了,我会很感激的?谢谢


Tags: 函数代码datadictionarylenif字典main
3条回答

在使用字典之前,你需要声明(和定义)你的字典,就像你点击2或3你将试图访问一个尚未声明的变量。在

然后,当你命中2或3时,它会表现为一个空的dict,当你命中1时,它会按照你想要的方式运行。在

def Main():
    dictionary = {}
    while True:
        choice = displayMenu()
        if choice == 1:
            dictionary = setValues()
        elif choice == 2:
            displayValues(dictionary)
        elif choice == 3:
            runModel(dictionary)
        elif choice == 4:
            exportData()
        elif choice == 5:
            quit()

在使用字典之前,将字典初始化为空dict({})。然后您可以执行if dict来检查它是否包含任何数据。这样您就可以确保dictionary在初始化之后的任何时候都有一个值。在

def Main():
    dictionary = {}
    while True:

在Python中,空字典的值为False,因此将“if len(data)==0”更改为“if not data”应该可以解决您的问题。在

相关问题 更多 >