[Python-Dev] Passing compile(...,'exec') code to 'eval'
Brett C.
bac at OCF.Berkeley.EDU
Wed May 5 14:23:16 EDT 2004
In preparations for my coding my thesis I have been trying to figure out
how a local variable could be assigned to without me explicitly knowing
during compilation. Obviously 'exec' can. But I wasn't sure about 'eval'.
Reading the docs, I didn't think it could since 'eval', when taking a
string, only evaluates expressions. But what about code objects? The
docs say, "The code object must have been compiled passing 'eval' as
the kind argument". But I didn't read that when I started testing.
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.
-Brett
More information about the Python-Dev
mailing list