5

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

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

4

3 回答 3

2

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

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

于 2012-05-14T15:58:45.777 回答
1
>>> eval("20<30")
True
于 2012-05-14T15:56:34.107 回答
0

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

于 2012-05-14T16:12:11.117 回答