| :mod:`codeop` --- Compile Python code |
| ===================================== |
| |
| .. module:: codeop |
| :synopsis: Compile (possibly incomplete) Python code. |
| .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> |
| .. sectionauthor:: Michael Hudson <mwh@python.net> |
| |
| The :mod:`codeop` module provides utilities upon which the Python |
| read-eval-print loop can be emulated, as is done in the :mod:`code` module. As |
| a result, you probably don't want to use the module directly; if you want to |
| include such a loop in your program you probably want to use the :mod:`code` |
| module instead. |
| |
| There are two parts to this job: |
| |
| #. Being able to tell if a line of input completes a Python statement: in |
| short, telling whether to print '``>>>``' or '``...``' next. |
| |
| #. Remembering which future statements the user has entered, so subsequent |
| input can be compiled with these in effect. |
| |
| The :mod:`codeop` module provides a way of doing each of these things, and a way |
| of doing them both. |
| |
| To do just the former: |
| |
| .. function:: 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. |
| |
| If there is a problem with *source*, an exception will be raised. |
| :exc:`SyntaxError` is raised if there is invalid Python syntax, and |
| :exc:`OverflowError` or :exc:`ValueError` if there is an invalid literal. |
| |
| The *symbol* argument determines whether *source* is compiled as a statement |
| (``'single'``, the default) or as an :term:`expression` (``'eval'``). Any |
| other value will cause :exc:`ValueError` to be raised. |
| |
| .. note:: |
| |
| It is possible (but not likely) that the parser stops parsing with a |
| successful outcome before reaching the end of the source; in this case, |
| trailing symbols may be ignored instead of causing an error. For example, |
| a backslash followed by two newlines may be followed by arbitrary garbage. |
| This will be fixed once the API for the parser is better. |
| |
| |
| .. class:: Compile() |
| |
| Instances of this class have :meth:`__call__` methods identical in signature to |
| the built-in function :func:`compile`, but with the difference that if the |
| instance compiles program text containing a :mod:`__future__` statement, the |
| instance 'remembers' and compiles all subsequent program texts with the |
| statement in force. |
| |
| |
| .. class:: CommandCompiler() |
| |
| Instances of this class have :meth:`__call__` methods identical in signature to |
| :func:`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. |