我在字符串中有一个布尔表达式。例如。20 < 30
. 有没有一种简单的方法来解析和评估这个字符串,所以它会返回True
(在这种情况下)。
ast.literal_eval("20 < 30")
不起作用。
这是用户定义的字符串,还是您正在定义的字符串?
如果它是您正在创建的字符串,您可以使用eval
( eval("20 < 30")
),但如果字符串是由用户提供的,您可能需要先对其进行清理...
>>> eval("20<30")
True
ast.literal_eval
不应该工作,因为(来自文档)“提供的字符串或节点可能只包含以下 Python 文字结构:字符串、数字、元组、列表、字典、布尔值和无。”。该表达式在返回a20<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
。