ast.literal_eval
nie powinien pracować ponieważ (od docs) "Dostarczony ciąg lub węzeł może składać się tylko z następujących literałowych struktur Pythona: łańcuchów, liczb, krotek, list, dykt, wartości logicznych i Brak.". Wyrażenie 20<30
wymaga pewnego rodzaju oceny, zanim zostanie zwrócone.
Bezpieczniejszą propozycją byłoby podzielenie struny na operatora i literal_eval
z każdej strony, zanim przejdziemy na eval
, tj.
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))
Owijanie rzeczą w try, except
klauzuli złapie jakieś błędy podczas oceny lhs,rhs
wejściowych.
Dzięki zapomniałem o tym – RickyA