[Python] alternative ad eval

enrico franchi enrico.franchi a gmail.com
Mar 18 Mar 2014 03:43:27 CET


2014-03-17 23:14 GMT+00:00 Balan Victor <balan.victor0 a gmail.com>:

>
> Il giorno 17 marzo 2014 23:29, enrico franchi <enrico.franchi a gmail.com>ha scritto:
>
>
>> 2014-03-17 21:57 GMT+00:00 Balan Victor <balan.victor0 a gmail.com>:
>>
>> Conosco i rischi di eval e vorrei evitare di usarlo però non riesco a
>>> trovare nulla di altrettanto semplice e con le stesse potenzialità.
>>>
>>
>> La soluzione 'semplice' e' scrivere un piccolo parser per le espressioni
>> che ti servono.
>> E' meno complicato di quello che sembra, e' molto robusto perche' hai il
>> completo controllo e non hai rischi.
>>
>> Ci avevo pensato però non ho trovato granché che mi aiutasse a fare
> qualche prova. Inoltre visto che l'utente, se ha bisogno, può definire
> oggetti di vario tipo per essere usati come value può anche definire una
> funzione check per l'oggetto e dentro la stringa da passare ad eval può
> scrivere "value.check()". Questo come lo gestisco nel parser? E come li
> passo value ? Questo è un caso estremo, però può accedere. I
>
> In ogni caso mi accontento di farlo funzionare solo con int, float, bool,
> string e datetime però non so da dove cominciare.
>


Ehm.. con la grammatica del linguaggio che vuoi parsare.

Ma lascia che te lo dica... secondo me rischi di ficcarti in un mezzo
ginepraio. Il fatto che tu abbia bisogno di questo secondo campo cosi'
flessibile non ottimo indice che le cose saranno facili.

Per il resto puoi definirti un linguaggio che fa tutto quello che ti pare,
ma non sarebbe meglio limitarsi ad un set di check prefabbricati?


>
>
>
>> Altrimenti Python viene con un po' di librerie per parsare python. Il
>> problema e' che una completa sandbox e' (l'ultima volta che mi ero
>> informato) essenzialmente impossibile per come funziona Python. Quindi hai
>> comunque rischi.
>>
> tipo pyparser? L'ho guardato ma la documentazione non mi sembra molto
> chiara e sembra che sia stato abbandonato ...
>

No, quello ti serve per scrivere un parser. Uno dei tanti tool per farlo.

-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140318/2e62a058/attachment-0001.html>


Maggiori informazioni sulla lista Python