Чтобы подчеркнуть совет Дж. Ф. Себастьяна, решения 'eval' и даже 'компилятор' могут быть открыты для тонких дыр в безопасности. Насколько заслуживает доверия вход? С помощью 'compiler' вы можете, по крайней мере, отфильтровать такие вещи, как поиск getattr из AST, но я обнаружил, что проще использовать PLY или pyparsing для такого рода вещей, чем обеспечить результат помощи Python.
Кроме того, «компилятор» неуклюж и труден в использовании. Это устарело и удалено в 3.0. Вы должны использовать модуль 'ast' (добавлен в 2.6, доступен в 2.5 как '_ast').