[Tutor] Isolation of code

Dave Kuhlman dkuhlman at rexx.com
Sun Oct 8 17:59:20 CEST 2006


On Sun, Oct 08, 2006 at 12:36:32PM +0530, Noufal Ibrahim wrote:
> Greetings everyone,
>    I'm working on a little project that's similar to tcltutor for python.
> I have a string which has some python code. I "compile" and "eval" this
> to get the output. So far so good. However, when this happens, the
> evaluation is happening in the current namespace so I'm afraid of
> symbols being redefined and messed up.
>    What I want to do is to create a separate namespace for all the code so
> that I can execute it without worrying about symbol mangling.
> 
>    Something like if the code I have is
> code = """
> x=5
> if x==5:
>   print "Yes"
> else:
>   print "No"
> """
> 
> I'd like to be able to create a separate module called (say) "tester"
> with contents
> 
> def __start_exec__():
>   <contents of the code variable>
> 
> then say something like
> import tester
> tester.__start_exec__()
> 
> to actually run the code. This way, the namespace would be separate.
> 

Two points:

1. (Stating something obvious) Code in a module, when called, does
   run in a separate namespace.  For example, if I run:

       import modB
       modB.f()

   then any variables set in modB are local to modB.

2. If that separation of namespaces is not "strong" enough for you,
   try something like the following:

       exec somecode in globalDict

   where globalDict is a dictionary.  globalDict will be the
   namespace used by somecode, and, for example, variables created
   (perhaps using assignment) in somecode will be created in
   globalDict rather than in the current namespace.  See:
   http://docs.python.org/ref/exec.html.

Dave


-- 
Dave Kuhlman
http://www.rexx.com/~dkuhlman


More information about the Tutor mailing list