2011-01-21 85 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()