What is a "code object" mentioned in this TypeError message?

Question:

While trying to use Python’s exec statement, I got the following error:

TypeError: exec: arg 1 must be a string, file, or code object

I don’t want to pass in a string or a file, but what is a code object, and how do I create one?

Asked By: oneself

||

Answers:

One way to create a code object is to use compile built-in function:

>>> compile('sum([1, 2, 3])', '', 'single')
<code object <module> at 0x19ad730, file "", line 1>
>>> exec compile('sum([1, 2, 3])', '', 'single')
6
>>> compile('print "Hello world"', '', 'exec')
<code object <module> at 0x19add30, file "", line 1>
>>> exec compile('print "Hello world"', '', 'exec')
Hello world

also, functions have the function attribute __code__ (also known as func_code in older versions) from which you can obtain the function’s code object:

>>> def f(s): print s
... 
>>> f.__code__
<code object f at 0x19aa1b0, file "<stdin>", line 1>
Answered By: Lie Ryan

Code objects are described here:

Code objects represent byte-compiled
executable Python code, or bytecode.
The difference between a code object
and a function object is that the
function object contains an explicit
reference to the function’s globals
(the module in which it was defined),
while a code object contains no
context; also the default argument
values are stored in the function
object, not in the code object
(because they represent values
calculated at run-time). Unlike
function objects, code objects are
immutable and contain no references
(directly or indirectly) to mutable
objects.

Answered By: Chris Jester-Young

There is an excellent blog post by Dan Crosta explaining this topic, including how to create code objects manually, and how to disassemble them again:

Exploring Python Code Objects

Answered By: Daniel Werner
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.