Search code examples
pythoncpython

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


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?


Solution

  • 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>