Turning String into Numerical Equation
Giovanni Bajo
noway at sorry.com
Mon Mar 14 19:43:48 EST 2005
Michael Spencer wrote:
> * this means that, eval("sys.exit()") will likely stop your
> interpreter, and
> there are various other inputs with possibly harmful consequences.
>
> Concerns like these may send you back to your original idea of doing
> your own expression parsing.
I use something along these lines:
def safe_eval(expr, symbols={}):
return eval(expr, dict(__builtins__=None, True=True, False=False), symbols)
import math
def calc(expr):
return safe_eval(expr, vars(math))
>>> calc("2+3*(4+5)*(7-3)**2")
434
>>> calc("sin(pi/2)")
1.0
>>> calc("sys.exit()")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in calc
File "<stdin>", line 2, in safe_eval
File "<string>", line 0, in ?
NameError: name 'sys' is not defined
>>> calc("0x1000 | 0x0100")
4352
--
Giovanni Bajo
More information about the Python-list
mailing list