| Store | Cart

Turn of globals in a function?

From: Ron_Adam <rad...@tampabay.rr.com>
Sun, 27 Mar 2005 02:13:20 GMT
On Sat, 26 Mar 2005 12:18:39 -0800, Michael Spencer
<mahs at telcopartners.com> wrote:

>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>  >>>

I didn't know you could do that. Interesting. :) 

I was hoping for something in line that could use with an assert
statement.  But this is good too, I'll have to play around with it a
bit. Thanks.

Ron


>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: html tags and python