2011-01-21 106 views
1

我有这个简单的Python脚本,myvar1generate()函数访问,但不是在copy()功能。需要帮助找出错误:错误的python脚本

#!/usr/bin/python 

import os, time 

def Test(tcid,descr,iterations,filsz): 

     def setup(): 
       print "entering set up\n" 
       global myvar1, myvar2 

       myvar1 = 1.0 
       myvar2 = os.getcwd() 

     def generate(): 
       print "entering generate\n" 
       print "in generate", myvar1, myvar2 

     def copy(): 

      print "in copy", myvar1, myvar2 
      myvar1 += 5.0 



     setup() 
     generate() 

     for loopcount in range(5): 
      loopcount = loopcount + 1 
      copy() 



if __name__ == "__main__": 
     Test('test','simple test',2,10) 

错误:

回溯(最近通话最后一个): 文件 “./pyerror.py” 35行,在 测试( '测试',”简单测试',2,10) 文件“./pyerror.py”,第30行,在测试中 copy() 文件“./pyerror.py”,第20行,副本 print“in copy”,myvar1 ,myvar2 UnboundLocalError:局部变量 'myvar1' 分配之前引用

+0

只有当_assigning_给变量时,Python范围问题的可能重复(http://stackoverflow.com/questions/2886932/python-scope-problems-only-when-assigning-to-a-variable) – 2011-01-22 00:02:29

回答

2

你需要global无论你覆盖全球的功能。 setup设置myvar1作为一个全球性,但你把它作为一个未设置局部变量。因此,“局部变量‘myvar1’分配之前引用的”

def copy(): 
    global myvar1 
    print "in copy", myvar1, myvar2 
    myvar1 += 5.0 

如果您正在阅读的是建议使用global定期然后把它扔掉,烧掉它,用不同的一个开始的教程。

2

copy()功能,myvar1未声明为全球性的,但在声明中myvar1 += 5.0分配。这隐含地使得myvar1成为局部变量。在函数的第一行中的print语句还试图访问一个局部变量的名称myvar1,但这样一个局部变量尚不存在。

局部变量是静态地确定,在编译时,即。当Python编译copy()时,myvar1被标记为整个函数体的局部变量。这可能是有益看最简单的代码来触发此错误:

def f(): 
    print x 
    x = 5 
x = 3 
f()