2012-05-14 34 views
5

我在字符串中有一个布尔表达式。例如。 。有没有简单的方法来解析和评估这个字符串,所以它会返回True(在这种情况下)。在Python字符串中测试布尔表达式

ast.literal_eval("20 < 30")不起作用。

回答

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

谢谢忘了那个 – RickyA

2

这是用户定义的字符串还是您定义的字符串?

如果这是您要创建一个字符串,你可以使用evaleval("20 < 30")),但如果串是由用户给定的,你可能需要先清理它...

+2

我创建它。不用担心:) Eval确实是一个非常好的非常大的安全漏洞。 – RickyA

0

ast.literal_eval不应该工作因为(来自文档)“所提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,字典,布尔值和无。”在返回 a bool之前,表达式20<30需要某种评估。

一个更安全的建议是将每一侧的字符串分开,然后传递到eval,即。

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)) 

结束语在try, except条款的东西会捕捉一些输入错误评估lhs,rhs时。