【问题标题】:Python Error - UnboundLocalError: local variable referenced before assignmentPython 错误 - UnboundLocalError:分配前引用的局部变量
【发布时间】:2016-05-20 21:06:50
【问题描述】:

我的问题: 在我的程序中,我有一个函数,它只应该在用户输入几个值时运行,然后将这些值保存在字典中。我最初的想法是在函数中获取字典的长度,如果它是 0(意味着它是空的),那将是没有输入值的标志。但是,当我运行代码时,我收到此错误“UnboundLocalError: local variable '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()

请注意,我确信返回保存在字典变量中的值的 setValues() 函数正在运行,就好像字典的 len 不为 0 的情况一样,代码工作正常。此外,我没有在代码的其他任何地方使用变量名“字典”,因此不会重复。 关于我哪里出错的任何可能的想法将不胜感激?谢谢

【问题讨论】:

  • 有 2 个分支(choice 2 或 3)您可以在没有声明的情况下使用 dictionary。您必须确保在到达这些分支之前分配字典。
  • 所有修复对我来说都很完美,谢谢大家的帮助

标签: python python-3.x


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您需要在使用它之前声明(并定义)您的字典,就像您点击 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()
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-08-20
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 2019-09-11
        • 2017-08-10
        • 2020-01-16
        相关资源
        最近更新 更多