2012-05-14 9 views

Respuesta

2
>>> eval("20<30") 
True 
+1

Gracias se olvidó de eso – RickyA

2

¿Es esta una cadena definida por el usuario, o una que está definiendo?

Si se trata de una cadena que está creando, se puede usar eval (eval("20 < 30")), pero si la cadena está dada por el usuario, es posible que desee desinfectar primero ...

+2

Lo creé. No se preocupe :) Eval es de hecho un agujero de seguridad muy bueno y muy GRANDE. – RickyA

0

ast.literal_eval no debería trabajar desde (de los documentos) "La cadena o nodo proporcionado solo puede consistir en las siguientes estructuras literales de Python: cadenas, números, tuplas, listas, dictos, booleanos y Ninguno.". La expresión 20<30 requiere algún tipo de evaluación, antes de que devuelva a bool.

Una sugerencia más segura sería dividir la cadena en el operador y literal_eval en cada lado antes de pasar a eval, es decir.

import ast 

expr = "20 < 30" 
operator = "<" 
lhs,rhs = map(ast.literal_eval, map(str.strip, expr.split(operator))) 
eval("%s %s %s"%(lhs,operator,rhs)) 

Envolver la cosa en una cláusula try, except cogerá algunos errores de entrada al evaluar lhs,rhs.

Cuestiones relacionadas