我在字符串中有一个布尔表达式。例如。 20 < 30
。是否有一种简单的方法来解析和评估此字符串,因此它将返回True
(在本例中)。
ast.literal_eval("20 < 30")
不起作用。
答案 0 :(得分:2)
这是用户定义的字符串,还是您定义的字符串?
如果它是您正在创建的字符串,则可以使用eval
(eval("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
子句中会捕获一些输入错误。