| :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> |
| |
n | |
| .. % LaTeXed from excellent doc-string. |
| |
| The :mod:`codeop` module provides utilities upon which the Python read-eval- |
| The :mod:`codeop` module provides utilities upon which the Python |
| print loop can be emulated, as is done in the :mod:`code` module. As a result, |
| read-eval-print loop can be emulated, as is done in the :mod:`code` module. As |
| you probably don't want to use the module directly; if you want to include such |
| a result, you probably don't want to use the module directly; if you want to |
| a loop in your program you probably want to use the :mod:`code` module instead. |
| 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: |
| |
n | |
| .. function:: compile_command(source[, filename[, symbol]]) |
| |
| 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 |
n | (``'single'``, the default) or as an expression (``'eval'``). Any other value |
n | (``'single'``, the default) or as an :term:`expression` (``'eval'``). Any |
| will cause :exc:`ValueError` to be raised. |
| other value will cause :exc:`ValueError` to be raised. |
| |
t | .. warning:: |
| |
| **Caveat:** It is possible (but not likely) that the parser stops parsing with a |
| 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 |
| successful outcome before reaching the end of the source; in this case, |
| symbols may be ignored instead of causing an error. For example, a backslash |
| trailing symbols may be ignored instead of causing an error. For example, |
| followed by two newlines may be followed by arbitrary garbage. This will be |
| a backslash followed by two newlines may be followed by arbitrary garbage. |
| fixed once the API for the parser is better. |
| 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 |