我得到布尔表达式如下图所示:如何使用eval()评估python字符串布尔表达式?
string = '!True && !(True || False || True)'
我知道eval('1+2')
回报3
。但是当我执行eval(string)
时,它在我的无效语法中抛出错误。
有没有其他方法可以执行上述表达式?
我得到布尔表达式如下图所示:如何使用eval()评估python字符串布尔表达式?
string = '!True && !(True || False || True)'
我知道eval('1+2')
回报3
。但是当我执行eval(string)
时,它在我的无效语法中抛出错误。
有没有其他方法可以执行上述表达式?
没有!
,&&
和||
是有效的Python操作符; eval()
只能处理有效的Python表达式。
您必须用有效的Python版本替换这些表达式;想必!
是not
,&&
为and
,并||
为or
,所以你可以只是取代那些用Python版本:not
后
eval(string.replace('&&', 'and').replace('||', 'or').replace('!', 'not '))
注意的空间,因为Python的需要这一点。
更好的方法是不对这些运算符使用错误的拼写(它们看起来像Java或JavaScript或C)。
如果你想解析布尔逻辑(与控制流相反),看看this stackoverflow post。它提到pyparsing
的pyparsing模块是一种替代方法,以创建和执行简单的语法
和sympy。
SymPy的逻辑模块允许使用符号和布尔值形成和操作逻辑表达式。
似乎还有parser implemented with pyparsing。
当然你也可以自己写一个解析器。
python不使用'&&'和'||' - 你想'''''',''''不''。 – georg 2015-03-25 10:18:14
'!True'是无效的Python。 Python中不存在'!'运算符,而是使用'not'。 – 2015-03-25 10:19:23