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