Why does __builtins__ mean different things...

Jean-Paul Calderone exarkun at divmod.com
Thu Dec 20 18:08:34 EST 2007


On Thu, 20 Dec 2007 14:29:35 -0800, James Stroud <jstroud at mbi.ucla.edu> wrote:
>Hello all,
>
>Say I have the following module
>
># amodule.py
>print __builtins__
># end of module
>
>Then I have the following little helper script:
>
># helper.py
>import amodule
># end of helper script
>
>Now, I do this at the command line:
>
>python amodule.py
>
>And I get the following output:
>
><module '__builtin__' (built-in)>
>
>Which is good.
>
>Now, I do this:
>
>python helper.py
>
>and I get the following output:
>
>{'IndexError': <type 'exceptions.IndexError'>, 'all;:
>... [etc]
>
>I.e.: __builtins__ is a dict when referenced in an imported module, but
>in *the exact same code*, when executed as a script, it becomes a
>module! Is this a bug?
>
>In other words, what is the good of this? For the purposes of argument,
>the bad of this is the behavior above. I'm guessing its a bug.
>

__builtins__ is "a CPython implementation detail".  In other words, unless
you are doing really funny stuff, you shouldn't use it.

What you're probably looking for is the __builtin__ module (difference in
spelling intentional).  You have to import it explicitly.  Once you do so,
it behaves in a very unsurprising manner.

Jean-Paul



More information about the Python-list mailing list