UnboundLocalError on global variable

Konstantinos Pachopoulos kostaspaxos at yahoo.gr
Sun Sep 9 22:48:33 CEST 2007


Hi,
i have a problem, the source of which is probably the fact, that i have 
not understood how to declare global variables - I use the Jython
compiler, but i think this is a Python issue...

First of all, i don not use any classes in this module. The problem is, 
that i declare and instantiate some vars outside the functions (global
ones), but when i use them inside the functions, i get an 
"UnboundLocalError" error.

Here's the interesting part of the code:

==========================================================================================
#imports
...

#CONSTANTS
.....


...
#connection to DB
dbcursor_=db.cursor()

#GLOBAL VARS
entryList_={}
cmterID_=0          //VARIABLE DECLARATION
projID_=0
fileIDNumber_=0
Commiter_={}
Commit_={}
Project_={}        
ProjectVersion_={}
              

def updateCommiterTable(Commiter):
    query="INSERT INTO Commiter (pk_cmterID,cmterName) VALUES 
("+str(Commiter[0])+",\""+str(Commiter[1])+"\");"
    dbcursor_.execute(query)
 
 
def updateCommitTable(Commit):
    query="INSERT INTO Commit 
(pk_cmitID,cmitTime,fk_cmterID,cmitProperties,cmitComment,cmitCommentLines,fk_projID) 
VALUES (" \
             
+str(Commit[0])+",\""+str(Commit[1])+"\","+str(Commit[2])+",\""+str(Commit[3])+"\",\""+str(Commit[4])+"\","+str(Commit[5])+","+str(Commit[6])+");"
    dbcursor_.execute(query)
                
                
def updateProjectTable(Project):
  dbcursor_.execute("INSERT INTO Project 
(pk_projID,projName,projWebsite,projContactPoint,projSrcPath,projMailPath) 
VALUES (" \
                         
+str(Project[0])+",\""+str(Project[1])+"\",\""+str(Project[2])+"\",\""+str(Project[3])+"\",\""+str(Project[4])+"\",\""+str(Project[5])+"\");")


def updateProjectVersionTable(ProjectVersion):
  dbcursor_.execute("INSERT INTO ProjectVersion 
(pfk_projID,projName,projVersion) VALUES (" \
                          
+str(ProjectVersion[0])+",\""+str(ProjectVersion[1])+"\",\""+str(ProjectVersion[2])+"\");");



def getLogsLoop():
    
   while 
svnLogging_.getCurrentRevisionNumber()!=svnLogging_.getLatestRevisionNumber():       
 

     try:
        entryList_=svnLogging_.getNextLogs(PIVOT);
     except HeadRevisionReachedException:
        print "Attempting to go over the HEAD revision..."
            
     for entry in entryList_:
        print "processing new SVN entry..."
        processLogEntry(entry)

     entryList_.clear()            
            

def processLogEntry(entry):


   revision = int(entry.getRevision())
   commiter = str(entry.getAuthor())  
   datetime = getTimeStamp(entry.getDate())
   message = str(entry.getMessage())        
        
   Commiter_[0] = cmterID_ //HERE's THE PROBLEM
   Commiter_[1] = commiter
   updateCommiterTable(Commiter_)
        
    
   Commit_[0] = revision    
   Commit_[1] = datetime    
   Commit_[2] = cmterID_
   Commit_[3] = "" #properties
   Commit_[4] = message     
   Commit_[5] = getNumberOfLines(message)
   Commit_[6] = projID_
   updateCommitTable(Commit_)

   ProjectVersion_[0]=projID_
   ProjectVersion_[1]=""
   ProjectVersion_[2]=""
   updateProjectVersionTable(ProjectVersion_)
        
   Project_[0]=projID_
   Project_[1]=""
   Project_[2]=""
   Project_[3]=""
   Project_[4]=""             
   Project_[5]=""                
   updateProjectTable(Project_)                                      
            
   cmterID_+=1            
   projID_+1
    
##############################HELPER##METHODS###############################   
 
...        
##############################HELPER##METHODS###############################   
 

getLogsLoop()
==========================================================================================


And I get:
==========================================================================================
Traceback (innermost last):
  File "ParseSVN2DB.py", line 182, in ?
  File "ParseSVN2DB.py", line 87, in getLogsLoop
  File "ParseSVN2DB.py", line 100, in processLogEntry
UnboundLocalError: local: 'cmterID_'
==========================================================================================

The things is, that cmterID_ HAS BEEN instantiated... I don't understand.
Can somebody please explain?



More information about the Python-list mailing list