En Fri, 05 Jun 2009 00:12:25 -0300, John Machin <sjmac...@lexicon.net> escribió:

> (2) This will stop processing on the first object in sys.modules that
> doesn't have a __file__ attribute. Since these objects aren't
> *guaranteed* to be modules,

Definitely not guaranteed to be modules. Python itself drops non-modules in
there! Python 2.3 introduced four keys mapped to None -- one of these was
dropped in 2.4, but the other three are still there in 2.5 and 2.6:

In case someone wonders what all those None are: they're a "flag" telling the import machinery that those modules don't exist (to avoid doing a directory scan over and over, because Python<2.7 attempts first to do a relative import, and only if unsuccessful attempts an absolute one)

C:\junk>\python23\python -c "import sys; print [k for (k, v) in
sys.modules.items() if v is None]"
['encodings.encodings', 'encodings.codecs', 'encodings.exceptions',
'encodings.types']

In this case, somewhere inside the encodings package, there are statements like "import types" or "from types import ...", and Python could not find types.py in the package directory.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to