我在字符串中有一个布尔表达式。例如。 。有没有简单的方法来解析和评估这个字符串,所以它会返回True
(在这种情况下)。在Python字符串中测试布尔表达式
ast.literal_eval("20 < 30")
不起作用。
我在字符串中有一个布尔表达式。例如。 。有没有简单的方法来解析和评估这个字符串,所以它会返回True
(在这种情况下)。在Python字符串中测试布尔表达式
ast.literal_eval("20 < 30")
不起作用。
>>> eval("20<30")
True
这是用户定义的字符串还是您定义的字符串?
如果这是您要创建一个字符串,你可以使用eval
(eval("20 < 30")
),但如果串是由用户给定的,你可能需要先清理它...
我创建它。不用担心:) Eval确实是一个非常好的非常大的安全漏洞。 – RickyA
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
时。
谢谢忘了那个 – RickyA