测试Python字符串中的布尔表达式

时间:2012-05-14 15:53:49

标签: python parsing

我在字符串中有一个布尔表达式。例如。 20 < 30。是否有一种简单的方法来解析和评估此字符串,因此它将返回True(在本例中)。

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

3 个答案:

答案 0 :(得分:2)

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

如果它是您正在创建的字符串,则可以使用evaleval("20 < 30")),但如果该字符串由用户提供,您可能需要首先对其进行清理...

答案 1 :(得分:1)

>>> eval("20<30")
True

答案 2 :(得分:0)

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

更安全的建议是在传递给literal_eval之前将字符串拆分到运算符和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子句中会捕获一些输入错误。