我得到布爾表達式如下圖所示:如何使用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