[Python] alternative ad eval

Riccardo Lemmi riccardo a reflab.com
Mar 18 Mar 2014 11:51:20 CET


Balan Victor wrote:

> Ho un array di tuple cosi formate da 3 elementi:
> (int|float|boolean|string|datetime|..., string, boolean). Es:
> 
> [
>  (10, "value >= 1", True),
>  ("Ciao", "o in value", True),
>  (True, "value == False", False),
>  (92.5f, "value >= 92.0f", True),
> ]
> Il primo elemento della tupla può essere qualunque tipo o classe di
> python. Il secondo elemento è una espressione da applicare sulla tupla
> e che deve restituire True or False(value si riferisce al primo
> elemento della tupa) Il terzo elemento è il risultato dell'operazione
> appena sopra.
> 
> A intervalli regolari ho bisogno di scorrere l'array sopra e
> aggiornare il valore del terzo elemento.
> Ho pensato di usare eval in questo modo:
> 
> def check_status(value, eval_string):
>   rc =  eval(eval_string)
>   if rc is not bool: raise WrongEvalString()
>   return rc
> 
> Conosco i rischi di eval e vorrei evitare di usarlo però non riesco a
> trovare nulla di altrettanto semplice e con le stesse potenzialità.
> 
> NB: In realtà la stringa che fa la validazione può essere impostata
> solo da qualcuno di autorizzato quindi il rischio che mi cancelli
> tutto il fs non ci dovrebbe essere, e non dovrebbero nemmeno fare
> operazioni del tipo "value ** value" però in ogni caso vorrei trovare
> qualcosa che mi metta al sicuro da questo tipo di operazioni.
> 
> grazie

Alcune librerie ci sono, ad esempio:

  https://pypi.python.org/pypi/RestrictedPython

ce ne sono anche altre: cerca "restricted python" su pypi.
-- 
                                       Riccardo Lemmi



Maggiori informazioni sulla lista Python