【问题标题】:"local variable 'stringData' referenced before assignment" error in python [duplicate]python中的“分配前引用的局部变量'stringData'”错误[重复]
【发布时间】:2021-07-30 18:15:14
【问题描述】:

我收到关于变量的这个(烦人的)错误。这是我的代码,我不知道是什么原因造成的,也不知道如何修复它:

stringData = ''
newLine = True

def displayData():
    print(stringData)

def addData(str):
    if newLine and stringData != '':
        stringData += f'\n{str}'
    else:
        stringData += str

它没有为错误提供太多上下文,我不知道如何修复它。

【问题讨论】:

  • 这些函数在哪里调用?
  • addData(str)函数中,如果要修改global变量,在函数的第一行添加global stringData。现在的方式是,Python 假设变量 stringData 是函数的本地变量(而不是全局变量),并且您正在修改它,然后在函数中对其进行初始化。 (或者,您可以像 Ricardo 那样将其作为参数传递给函数。)

标签: python console-application


【解决方案1】:

小心,您的变量 str 是保留关键字,不应用作变量名。也就是说,这不是你问题的根源。 下面的代码通过覆盖 stringData 的值来工作。

stringData = ''

newLine = True

def displayData():
    print(stringData)

def addData(my_str,stringData):
    if newLine and stringData != '':
        stringData += f'\n{my_str}'
    else:
        stringData += my_str
    return stringData

stringData = addData('4',stringData)
stringData = addData('3',stringData)
displayData()

【讨论】:

    【解决方案2】:

    你可以使用类:

    class myData:
        def __init__(self):
            self.stringData = ''
            self.newLine = True
    
        def displayData(self):
            print(self.stringData)
    
        def addData(self, str):
            if self.newLine and self.stringData != '':
                self.stringData += f'\n{str}'
            else:
                self.stringData += str
    

    然后:

    md = myData()
    md.addData("Hello")
    md.displayData()
    
    OUT : 
    Hello
    

    然后:

    md.addData("World")
    md.displayData()
    
    OUT:
    Hello
    World
    

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 2012-06-06
      • 2012-08-07
      相关资源
      最近更新 更多