[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