Re: Simple and safe evaluator



On Jun 16, 4:47 pm, bvdp <b...@xxxxxxxxxxxx> wrote:

2. I thought I'd be happy with * / + -, etc. Of course now I want to add
a few more funcs like int() and sin(). How would I do that?

For the builtin eval, just populate the globals dict with the names
you want to make available:

import math

globs = {'__builtins__' : None}

# expose selected builtins
for name in 'True False int float round abs divmod'.split():
globs[name] = eval(name)

# expose selected math constants and functions
for name in 'e pi sqrt exp log ceil floor sin cos tan'.split():
globs[name] = getattr(math,name)

return eval(s, globs, {})


The change to the _ast version is left as an exercise to the reader ;)

George
.



Relevant Pages

  • Re: [ANNOUNCE] System Inactivity Monitor v1.0
    ... this options lets you to specify how much frequently SIN should be ... static struct timer_list timer; ... static int shutdown; ...
    (Linux-Kernel)
  • Combining Functions
    ... enters his radians i was to link to a sin x function to calculate the ... sin of the number also there will be a factorial function and a cos ... int factorial() ... cin>> item; ...
    (microsoft.public.dotnet.languages.vc)
  • Re: Simple and safe evaluator
    ... a few more funcs like int() and sin(). ... # expose selected math constants and functions ... I'm assuming that the _ast definitions are buried in the C part of python, but that is just a silly guess. ...
    (comp.lang.python)
  • Re: Combining Functions
    ... enters his radians i was to link to a sin x function to calculate the ... sin of the number also there will be a factorial function and a cos ... int factorial() ... cin>> item; ...
    (microsoft.public.dotnet.languages.vc)