# `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:

1. Being able to tell if a line of input completes a Python statement: in short, telling whether to print “`>>>`” or “`...`” next.

2. Remembering which future statements the user has entered, so subsequent input can be compiled with these in effect.

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')

  Tries to compile source, which should be a string of Python code and return a code object if source is valid Python code. In that case, the filename attribute of the code object will be filename, which defaults to `'<input>'`. Returns `None` if source is not valid Python code, but is a prefix of valid Python code.

  Si hay un problema con source, se lanzará una excepción. `SyntaxError` se lanza si hay una sintaxis de Python no válida, y `OverflowError` o `ValueError` si hay un literal no válido.

  The symbol argument determines whether source is compiled as a statement (`'single'`, the default), as a sequence of statement (`'exec'`) or as an expression (`'eval'`). Any other value will cause `ValueError` to be raised.

  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 incorporada `compile()`, 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`

  Instances of this class have `__call__()` methods identical in signature to `compile_command()`; the difference is that if the instance compiles program text containing a `__future__` statement, the instance “remembers” and compiles all subsequent program texts with the statement in force.