Exec Statement Question

Georg Brandl g.brandl at gmx.net
Mon Apr 9 02:10:26 EDT 2007


Gregory Piñero schrieb:
> I'm curious why this code isn't working how I expect it to:
> 
> import sys
> d=3
> 
> def func1(a,b,c):
>     print a,b,c,d
>     print sys.path
> 
> exec "func1(1,2,3)" in {'func1':func1}
> 
> ----
> returns:
> 1 2 3 3
> [ sys.path stuff ....]
> 
> Since I'm telling exec to operate only within the context of the
> dictionary I give it, why does it still see sys.path and d?  I figured
> it would throw a NameError.
> 
> Is there a way to call exec such that it won't have access to any more
> objects than I explicitly give it?

The function f has a func_globals attribute which points to the globals it
will use for execution. This is of course set at definition time so that
functions from, e.g., another module, have the globals of that module available.

Georg




More information about the Python-list mailing list