[Import-SIG] PEP 402 implementation
P.J. Eby
pje at telecommunity.com
Wed Jul 20 23:15:55 CEST 2011
At 01:08 PM 7/20/2011 -0700, Brett Cannon wrote:
>Obviously feel free to ask me questions (publicly or privately) if
>anything in the importlib code is an issue for you (I know its
>structure for bootstrapping reasons is a bit odd).
While we're on the topic, I was just browsing through importlib
(while doing my sketch on how to support the "no pure virtual
imports" change to PEP 402; see
http://mail.python.org/pipermail/python-dev/2011-July/112385.html )
and I noticed that there are a few places in the implementation where
it makes assumptions about objects' boolean values.
For example, PathFinder's find_module treats an empty path the same
as sys.path, and will also fail if for some reason the bool() of a
PEP 302 finder or loader object is False. Also, module_for_loader()
will create a new module object, if you have a False module subclass
in sys.modules.
Is there any particular reason for these digressions from strict PEP
302? I can understand, say, Jython and IronPython not wanting to
generate object id's, but I was under the impression that those
languages can do identity checks (especially against None) without
running into the general problem of generating object IDs in the
presence of garbage collection.
These distinctions could be more problematic than they appear, as
it's possible to inadvertently make your loader or your module
subclass capable of being False (for example, if you subclassed a
sequence type or implemented a __len__), and this could lead to some
very subtle bugs, albeit very rare ones as well. ;-)
More information about the Import-SIG
mailing list