codeop
— Compila código Python¶
Código fuente: Lib/codeop.py
El módulo codeop
proporciona herramientas para emular el bucle principal del intérprete de Python (también conocido como read-eval-print), tal como se hace en el módulo code
. Por lo tanto, este módulo no está diseñado para utilizarlo directamente; si desea incluir un ciclo de este tipo en su programa, probablemente es mejor utilizar el módulo code
en su lugar.
Esta actividad consta de dos partes:
Ser capaz de identificar si una línea de entrada completa una sentencia de Python: en resumen, decir si se debe imprimir a continuación “
>>>
” o “...
” .Recordar qué sentencias posteriores ha ingresado el usuario, para que estas entradas sean incluidas al momento de compilar.
El módulo codeop
proporciona formas de realizar estas dos partes, tanto de forma independiente, como en conjunto.
Para hacer lo anterior:
-
codeop.
compile_command
(source, filename="<input>", symbol="single")¶ Intenta compilar source, que debe ser una cadena de caracteres de código Python y retorna un objeto si source es código Python válido. En este caso, el atributo del nombre del archivo del objeto va a ser filename, el cuál por defecto es
'<input>'
. RetornaNone
si source no es código Python válido, pero es un prefijo de código Python válido.Si hay un problema con source, se lanzará una excepción.
SyntaxError
se lanza si hay una sintaxis de Python no válida, yOverflowError
oValueError
si hay un literal no válido.El argumento symbol determina si source se compila como una declaración (
'single'
, el valor predeterminado) o como un expression ('eval'
). Cualquier otro valor hará que se lanceValueError
.Nota
Es posible (pero no probable) que el analizador deje de analizar con un resultado exitoso antes de llegar al final de la fuente; en este caso, los símbolos finales pueden ignorarse en lugar de provocar un error. Por ejemplo, una barra invertida seguida de dos nuevas líneas puede ir seguida de basura arbitraria. Esto se solucionará una vez que la API para el analizador sea mejor.
-
class
codeop.
Compile
¶ Las instancias de esta clase tienen
__call__()
métodos idénticos en firma a la función incorporadacompile()
, pero con la diferencia de que si la instancia compila el texto del programa que contiene una instrucción__future__
, la instancia “recuerda” y compila todos los textos de programa posteriores con la declaración en vigor.
-
class
codeop.
CommandCompiler
¶ Las instancias de esta clase tienen
__call__()
métodos idénticos en firma acompile_command()
; la diferencia es que si la instancia compila un texto de programa que contiene una declaración__future__
, la instancia “recuerda” y compila todos los textos de programa posteriores con la declaración en vigor.