2012-05-14 35 views
5

我在字符串中有一個布爾表達式。例如。 。有沒有簡單的方法來解析和評估這個字符串,所以它會返回True(在這種情況下)。在Python字符串中測試布爾表達式

ast.literal_eval("20 < 30")不起作用。

回答

2
>>> eval("20<30") 
True 
+1

謝謝忘了那個 – RickyA

2

這是用戶定義的字符串還是您定義的字符串?

如果這是您要創建一個字符串,你可以使用evaleval("20 < 30")),但如果串是由用戶給定的,你可能需要先清理它...

+2

我創建它。不用擔心:) Eval確實是一個非常好的非常大的安全漏洞。 – RickyA

0

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時。