Marilyn Davis said unto the world upon 2004-12-04 01:37:
Hello Tutors,

I'm having trouble understanding the difference between eval and exec.

Can anyone explain it to me please?

Marilyn Davis


Hi Marilyn,

does this help?

print a

Traceback (most recent call last): File "<pyshell#13>", line 1, in -toplevel- print a NameError: name 'a' is not defined
# as expected, since 'a' doesn't yet point to anything.
exec("a = 2 + 40")
# this means 'Run the string "a = 2 + 40" by assuming it is Python
# code. Python code instructions are called "statements". (See [*]
# note below.
exec("print a")
42
# As before, run "print a" as code. Since we have run the code in
# the string "a = 2 + 40" this is the expected result.
eval("print a")

Traceback (most recent call last): File "<pyshell#16>", line 1, in -toplevel- eval("print a") File "<string>", line 1 print a ^ SyntaxError: invalid syntax
# Error because eval("print a") means 'take the expression[*]
# in the string "print a" and evaluate it (tell me what it points
# to). [*] "Expression" means *roughly* "name of some object". Since
# 'print a' isn't an object at all but an instruction, eval
# complains. (Do watch for more experienced posters to clarify on
# the exact meaning of "expression" and "statement". I'm no expert.
eval("a = 38 + 4")

Traceback (most recent call last): File "<pyshell#17>", line 1, in -toplevel- eval("a = 38 + 4") File "<string>", line 1 a = 38 + 4 ^ SyntaxError: invalid syntax
# Again, an error, as "a = 38 + 4" is a statement (a code
# instruction) and eval wants an expression.
eval("a == 38 + 4")
True
# As expected, as "a == 38 + 4" is a string for a complicated name of
# True.

So, eval evaluates expressions (namelike things) and exec runs strings as though they were Python code.

HTH,

Brian vdB

_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to