我在字符串中有一個布爾表達式。例如。 。有沒有簡單的方法來解析和評估這個字符串,所以它會返回True
(在這種情況下)。在Python字符串中測試布爾表達式
ast.literal_eval("20 < 30")
不起作用。
我在字符串中有一個布爾表達式。例如。 。有沒有簡單的方法來解析和評估這個字符串,所以它會返回True
(在這種情況下)。在Python字符串中測試布爾表達式
ast.literal_eval("20 < 30")
不起作用。
>>> eval("20<30")
True
這是用戶定義的字符串還是您定義的字符串?
如果這是您要創建一個字符串,你可以使用eval
(eval("20 < 30")
),但如果串是由用戶給定的,你可能需要先清理它...
我創建它。不用擔心:) Eval確實是一個非常好的非常大的安全漏洞。 – RickyA
ast.literal_eval
不應該工作因爲(來自文檔)「所提供的字符串或節點可能只包含以下Python文字結構:字符串,數字,元組,列表,字典,布爾值和無。」在返回 a bool
之前,表達式20<30
需要某種評估。
一個更安全的建議是將每一側的字符串分開,然後傳遞到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
時。
謝謝忘了那個 – RickyA