在Python中赋值错误之前引用

在Python中,我收到以下错误:

UnboundLocalError: local variable 'total' referenced before assignment 

在文件的开头(在错误来自的函数之前),我使用global关键字声明“total”。 然后,在程序的主体中,在使用'total'的函数被调用之前,我将它赋值为0.我已经试过在不同的地方将它设置为0(包括文件的顶部,声明之后),但我不能得到它的工作。 有没有人看到我在做什么错了?

2 Solutions collect form web for “在Python中赋值错误之前引用”

我认为你正在使用'全球'错误。 请参阅Python参考 。 你应该声明variables没有全局,然后在函数内部,当你想访问全局variables,你声明它是global yourvar

 #!/usr/bin/python total def checkTotal(): global total total = 0 

看到这个例子:

 #!/usr/bin/env python total = 0 def doA(): # not accessing global total total = 10 def doB(): global total total = total + 1 def checkTotal(): # global total - not required as global is required # only for assignment - thanks for comment Greg print total def main(): doA() doB() checkTotal() if __name__ == '__main__': main() 

因为doA()不会修改全局总和,所以输出是1而不是11。

我的情景

 def example(): cl = [0, 1] def inner(): #cl = [1, 2] //access this way will throw `reference before assignment` cl[0] = 1 cl[1] = 2 //these won't inner() 
  • 在Python上模拟键盘和鼠标最简单的方法是什么?
  • 阻塞和不阻塞子stream程调用
  • 为什么Pythonstring是不可变的? 使用它们的最佳实践
  • 在执行函数时放入python解释器
  • 通过Python中的属性比较对象实例的相等性
  • Python中的SyntaxError不一致?
  • 嵌套循环使用列表理解
  • 绘制python matplotlib中的(x,y)坐标列表
  • 如何处理python中的破pipe(SIGPIPE)?
  • Python中的块之前冒号的目的是什么?
  • Djangodebugging工具栏:了解时间面板