Late binding eval()?

xtian wilberforce at gmail.com
Wed Aug 25 07:05:39 CEST 2004


Kevin Smith wrote:
> I want to evaluate an expression using eval(), but I only want to
supply
> the variable values "on demand."  For example, let's say that I want
to
> evaluate 'x+y'.  Normally, I would create a dictionary containing 'x'

> and 'y' with their corresponding values and pass it in as the globals
or
> locals.  However, in my application, I'm getting an arbitrary
expression
> from the user.  I thought that I could just create a dictionary-like
> object and override __getitem__ to look up values in a database as
they
> were called for, but that didn't work.
>

This will work in 2.4, see: http://www.python.org/2.4/highlights.html

"eval() now accepts any form of object that acts as a mapping as its
argument for locals, rather than only accepting a dictionary. There's
all sorts of new and shiny evil possible thanks to this little change."
Sweet.




More information about the Python-list mailing list