[Python-Dev] Passing compile(...,'exec') code to 'eval'

Guido van Rossum guido at python.org
Wed May 5 19:20:00 EDT 2004


> This is when I discovered you *can* pass in something using 'compile' 
> with the kind argument of "exec"::
> 
>  >>> x
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> NameError: name 'x' is not defined
> [16425 refs]
>  >>> eval(compile("x = 1", "<string>", "exec"))
> [16426 refs]
>  >>> x
> 1
> 
> Is this a bug, or are the docs wrong?  I am hoping it is the former 
> since if it is the latter my thesis just got a big caveat pasted into it 
> about how 'eval' can cause problems and invalidate the type inferencing 
> in irreparable ways.

You shouldn't do this, and if you do, you will pay for your sin in a
special kind of hell set aside for people who take the implementation
as the spec.  It's hard to detect such undefined usage without making
eval() (and possibly everything) slower though.

--Guido van Rossum (home page: http://www.python.org/~guido/)




More information about the Python-Dev mailing list