Alternativa a eval en Python

La eval Python es bastante lenta. Necesito evaluar expresiones booleanas simples con operadores lógicos (como “Verdadero o Falso”). Estoy haciendo esto por miles de líneas de datos y eval es un gran cuello de botella en términos de rendimiento. Es muy lento … ¿Algún enfoque alternativo?

Intenté crear un dict de posibles combinaciones de expresiones y su salida esperada, ¡pero esto es realmente feo!

Tengo el siguiente código en este momento:

 eval('%s %s %s' % (True, operator, False)) 

 import operator ops = { 'or': operator.or_, 'and': operator.and_ } print ops[op](True, False) 

No me queda claro cómo la solución de @ CatPlusPlus evaluará cualquier expresión booleana. Aquí hay un ejemplo de la página de ejemplos de wiki de un analizador / evaluador de expresiones booleanas . Aquí están los casos de prueba para este script:

 p = True q = False r = True test = ["p and not q", "not not p", "not(p and q)", "q or not p and r", "q or not (p and r)", "p or q or r", "p or q or r and False", ] for t in test: res = boolExpr.parseString(t)[0] print t,'\n', res, '=', bool(res),'\n'