如何使用eval()评估python字符串布尔表达式?

时间:2015-03-25 10:16:33

标签: python boolean

我得到如下布尔表达式:

string = '!True && !(True || False || True)'

我知道eval('1+2')会返回3。但是当我执行eval(string)时,它会在无效语法中抛出错误。

还有其他方法可以执行上面的表达式吗?

2 个答案:

答案 0 :(得分:2)

!&&||都不是有效的Python运算符; eval()只能处理有效的Python表达式。

你必须用有效的Python版本替换这些表达式;大概!not&&and||or,因此您可以更换那些Python版本:

eval(string.replace('&&', 'and').replace('||', 'or').replace('!', 'not '))

请注意not之后的空格,因为Python需要这个空间。

更好的方法是不对这些运算符使用错误的拼写(它们看起来像Java或JavaScript或C)。

答案 1 :(得分:2)

如果要解析布尔逻辑(与控制流相反),请查看this stackoverflow post。它提到了pyparsing

  

pyparsing模块是创建和执行简单语法的另一种方法

sympy

  

SymPy的逻辑模块允许使用符号和布尔值来形成和操作逻辑表达式。

似乎还有parser implemented with pyparsing

当然你也可以自己写一个解析器。