Re: Pasar string a valor

Arnau Sanchez <[email protected]> Wed, 05 May 2010 15:36:17 +0200
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
On 05/05/10 15:21, Ricardo C=E1rdenes Medina wrote:

> Puedes usar eval. Por ejemplo:
>
>    a =3D eval("20 * 10) + 5")
>
> Pero ten cuidado d=F3nde y cu=E1ndo usas esa funci=F3n, porque puede su=
poner
> un agujero de seguridad si se usa en lugares inadecuados.

Esto deber=EDa permitir ejecutar operaciones matem=E1ticas de forma segur=
a (=BFfalta=20
algo?):

import math

math_funcs =3D dict((s, getattr(math, s)) for s in dir(math) if not s.sta=
rtswith("_"))
extra_funcs =3D {"abs": abs, "int": int, "float": float}

def math_eval(s):
     return eval(s, dict(__builtins__=3DNone), dict(math_funcs, **extra_f=
uncs))

print math_eval("int(43 + sin(-pi/2))")
# 42
print math_eval("open('/etc/passwd').read()")
# NameError
_______________________________________________
Lista de correo Python-es=20
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes