[Python-Dev] How to block a module import

Brett Cannon brett at python.org
Tue Jul 13 22:34:58 CEST 2010


On Tue, Jul 13, 2010 at 05:48, Nick Coghlan <ncoghlan at gmail.com> wrote:

> On Tue, Jul 13, 2010 at 10:37 AM, Alexander Belopolsky
> <alexander.belopolsky at gmail.com> wrote:
> > In my experiments, 0 is not equivalent to None:
> >
> >>>> import sys, time
> >>>> sys.modules['time'] = 0
> >>>> __import__('time')
> > 0
> >>>> sys.modules['time'] = None
> >>>> __import__('time')
> > Traceback (most recent call last):
> >  File "<stdin>", line 1, in <module>
> > ImportError: No module named time
> >
> >  Am I missing something?
>
> I don't think so. I suspect I got away with this mistake because the
> imports I was trying to block in the test suite were all C
> acceleration imports of the form "from <module> import *", and those
> will blow up anyway since zero doesn't have __dict__ or __all__
> attributes.
>

Nick's right; 0 fails on an import * to pull anything in of interest. And as
I said on python-checkins -- you can ignore that email, Alexander -- there
is a historical reason because in Python 2 if you tried an implicit relative
import a value of None met to do an absolute import. This doesn't have that
effect in py3k as explicit relative imports are the only way to do relative
imports (and luckily importlib does the proper thing for this as well =).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20100713/efb310dd/attachment.html>


More information about the Python-Dev mailing list