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

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

Reply via email to