| 
									
										
										
										
											2024-05-08 15:34:40 -04:00
										 |  |  | :mod:`!codeop` --- Compile Python code
 | 
					
						
							|  |  |  | ======================================
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: codeop
 | 
					
						
							|  |  |  |    :synopsis: Compile (possibly incomplete) Python code.
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
 | 
					
						
							|  |  |  | .. sectionauthor:: Michael Hudson <mwh@python.net>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | **Source code:** :source:`Lib/codeop.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 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:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  | #. Being able to tell if a line of input completes a Python statement: in
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    short, telling whether to print '``>>>``' or '``...``' next.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  | #. Remembering which future statements the user has entered, so subsequent
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    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:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-10 09:03:43 +00:00
										 |  |  | .. function:: compile_command(source, filename="<input>", symbol="single")
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Tries to compile *source*, which should be a string of Python code and return a
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  |    code object if *source* is valid Python code.  In that case, the filename
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    attribute of the code object will be *filename*, which defaults to
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  |    ``'<input>'``.  Returns ``None`` if *source* is *not* valid Python code, but is a
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    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
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  |    (``'single'``, the default), as a sequence of :term:`statement` (``'exec'``) or
 | 
					
						
							| 
									
										
										
										
											2020-05-14 21:59:46 -03:00
										 |  |  |    as an :term:`expression` (``'eval'``).  Any other value will
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  |    cause :exc:`ValueError` to be raised.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-27 16:20:50 +00:00
										 |  |  |    .. note::
 | 
					
						
							| 
									
										
										
										
											2009-01-03 21:18:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-17 00:24:54 +00:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: Compile()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-23 11:23:44 +02:00
										 |  |  |    Instances of this class have :meth:`~object.__call__` methods identical in signature to
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    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()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-23 11:23:44 +02:00
										 |  |  |    Instances of this class have :meth:`~object.__call__` methods identical in signature to
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    :func:`compile_command`; the difference is that if the instance compiles program
 | 
					
						
							| 
									
										
										
										
											2023-03-30 15:51:36 -07:00
										 |  |  |    text containing a :mod:`__future__` statement, the instance 'remembers' and
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    compiles all subsequent program texts with the statement in force.
 |