| Store | Cart

Turn of globals in a function?

From: Michael Spencer <m...@telcopartners.com>
Sat, 26 Mar 2005 12:18:39 -0800
Ron_Adam wrote:
> Is there a way to hide global names from a function or class?> > I want to be sure that a function doesn't use any global variables by> mistake.  So hiding them would force a name error in the case that I> omit an initialization step.  This might be a good way to quickly> catch some hard to find, but easy to fix, errors in large code blocks.> > Examples:> > def a(x):>     # ...>     x = y         # x is assigned to global y unintentionally.>     # ...>     return x> > def b(x):>     # hide globals somehow>     # ...>     x = y    # Cause a name error>     # ...>     return x> > > y = True> > >>>>a(False):> > True> > >>>>b(False):> > *** name error here ***> > > Ron_Adam> >  
For testing, you could simply execute the function in an empty dict:

  >>> a = "I'm a">>> def test():
  ...     print a
  ...
  >>> test()
  I'm a
  >>> exec test.func_code in {}
  Traceback (most recent call last):
    File "<input>", line 1, in ?
    File "<input>", line 2, in test
  NameError: global name 'a' is not defined
  >>>

This would get more complicated when you wanted to test calling with parameters, 
so with a little more effort, you can create a new function where the globals 
binding is to an empty dict:

  >>> from types import FunctionType as function>>> testtest = function(test.func_code, {})>>> testtest()
  Traceback (most recent call last):
    File "<input>", line 1, in ?
    File "<input>", line 2, in test
  NameError: global name 'a' is not defined
  >>>

HTH

Michael

Recent Messages in this Thread
Ron_Adam Mar 26, 2005 08:01 pm
Michael Spencer Mar 26, 2005 08:18 pm
Bengt Richter Mar 26, 2005 09:02 pm
Ron_Adam Mar 27, 2005 02:49 am
Oren Tirosh Mar 27, 2005 06:51 am
Ron_Adam Mar 27, 2005 04:45 pm
Greg Ewing Mar 31, 2005 04:28 am
Ron_Adam Mar 31, 2005 05:31 pm
Ron_Adam Mar 27, 2005 02:13 am
Messages in this thread

Previous post: Embedding Python
Next post: wxPython Install