[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