[Newbie] Referring to a global variable inside a function

Ernesto García García titogarcia_nospamplease_ at gmail.com
Sun Apr 9 06:24:51 EDT 2006


Hi experts,

I've built a class for parsing a user-defined list of files and matching 
lines with a user-defined list of regular expressions. It looks like this:

<code>
import re
import glob

class LineMatcher:
   """ Parses a list of text files, matching their lines with the given
   regular expressions and executing associated actions."""

   def __init__(self):
     # List of file names to parse for matching.
     self.file_names = []
     # Association of reg expressions to actions to execute when match.
     self.regexp_action = {}

   def go(self):
     for file_name in self.file_names:
       file = open(file_name)
       for line in file:
         for regexp, action in self.regexp_action.items():
           match = regexp.match(line)
           if match:
             action(line, match.groupdict())

   def add_files(self, file_pattern):
     self.file_names.extend(glob.glob(file_pattern))

   def add_action(self, regexp_string, action):
     self.regexp_action[re.compile(regexp_string)] = action
</code>

But then, when I try to use my class using actions with "memory" it will 
fail:

<code>
import LineMatcher

global count
count = 0

def line_action(line, match_dictionary):
   count = count + 1

line_matcher = LineMatcher.LineMatcher()
line_matcher.add_files('*')
line_matcher.add_action(r'(?P<line>.*)', line_action)
line_matcher.go()
</code>

The error is:
<console>
Traceback (most recent call last):
   File "Test.py", line 12, in ?
     line_matcher.go()
   File "LineMatcher.py", line 21, in go
     action(line, match.groupdict())
   File "Test.py", line 7, in line_action
     count = count + 1
UnboundLocalError: local variable 'count' referenced before assignment
</console>

How would you do this?

Regards,
Tito



More information about the Python-list mailing list