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
