在Python中,可以使用ast.literal_eval()函數來安全地評估字符串表達式,這個函數會解析并評估字符串表達式,但只允許使用字面值表達式,不允許使用任意代碼執行。這樣可以避免使用eval()函數可能帶來的安全風險。例如:
import ast
s = "2 + 3"
result = ast.literal_eval(s)
print(result) # 輸出 5
另外,如果需要評估簡單的數學表達式,可以使用eval()函數,并通過傳遞一個局部和全局環境變量字典,來限制代碼執行的范圍。例如:
s = "__import__('os').system('rm -rf /')"
result = eval(s, {"__builtins__": {}}, {})
在這個例子中,我們通過傳遞一個只包含__builtins__的空字典來禁用內置函數,從而限制了eval()函數的功能。這樣可以增加安全性,但并不完全避免潛在的風險。因此,盡可能避免使用eval()函數,除非確實需要評估動態代碼。