On Tue, Jul 13, 2010 at 10:37 AM, Alexander Belopolsky
<alexander.belopolsky@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 =).
">

(original) (raw)



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

On Tue, Jul 13, 2010 at 10:37 AM, Alexander Belopolsky
<alexander.belopolsky@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 =).