Re: [Newbie] Referring to a global variable inside a function

2006-04-10 Thread bruno at modulix
Ernesto García García wrote:
 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:
 
(snip 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
(snip)
 /code
 
 The error is:
 console
(snip)
 UnboundLocalError: local variable 'count' referenced before assignment
 /console
 
 How would you do this?

FWIW, I would *not* use a global.

class LineAction(object):
  def __init__(self):
self.count = 0

  def __call__(self, line, match_dictionary):
self.count +=1

line_action = LineAction()

line_matcher = LineMatcher.LineMatcher()
line_matcher.add_files('*')
line_matcher.add_action(r'(?Pline.*)', line_action)
line_matcher.go()

HTH
-- 
bruno desthuilliers
python -c print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '[EMAIL PROTECTED]'.split('@')])
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: [Newbie] Referring to a global variable inside a function

2006-04-09 Thread Fredrik Lundh
Ernesto García García wrote:

 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'(?Pline.*)', 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?

def line_action(line, match_dictionary):
global count # make it a module-global variable, not a function-local
count = count + 1

/F



-- 
http://mail.python.org/mailman/listinfo/python-list

Re: [Newbie] Referring to a global variable inside a function

2006-04-09 Thread Ernesto García García
How would you do this?
 
 def line_action(line, match_dictionary):
 global count # make it a module-global variable, not a function-local
 count = count + 1
 
 /F

OK, I had put it on the global block.

Thanks,
Ernesto
-- 
http://mail.python.org/mailman/listinfo/python-list