![](/img/trans.png)
[英]How to evaluate a user input of a string as a math expression without using eval()?
[英]How to evaluate python string boolean expression using eval()?
我得到如下布爾表達式:
string = '!True && !(True || False || True)'
我知道eval('1+2')
返回3
。 但是當我執行eval(string)
它以無效的語法向我拋出錯誤。
有沒有其他方法可以執行上述表達式?
一個都沒有!
, &&
和||
是有效的 Python 運算符; eval()
只能處理有效的 Python 表達式。
您必須用有效的 Python 版本替換這些表達式; 大概!
not
, &&
是and
, 和||
是or
,所以你可以用 Python 版本替換它們:
eval(string.replace('&&', 'and').replace('||', 'or').replace('!', 'not '))
注意后面的空格not
因為 Python 需要這個。
更好的方法是不要對這些運算符使用錯誤的拼寫(它們看起來像 Java、JavaScript 或 C)。
如果您想解析布爾邏輯(與控制流相反),請查看此 stackoverflow 帖子。 它提到了pyparsing
pyparsing 模塊是創建和執行簡單語法的另一種方法
和同情。
SymPy 的邏輯模塊允許使用符號和布爾值來形成和操作邏輯表達式。
似乎還有一個用 pyparsing 實現的解析器。
當然你也可以自己寫一個解析器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.