<br><br><div class="gmail_quote">On Fri, Jul 24, 2009 at 10:39, Guido van Rossum <span dir="ltr">&lt;<a href="mailto:guido@python.org">guido@python.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Still works, at least in some old 3.1 I had lying around:<br>
</blockquote><div><br></div><div>Which reminds me, do we want to change the error message for ImportError in this case to say something like &quot;import of {0} halted; None found in sys.modules&quot;? Might be a tough exception to debug if you are not aware that some library shoved None into sys.modules.</div>

<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
$ python3.1<br>
Python 3.1a0 (py3k:70152, Mar  3 2009, 16:55:42)<br>
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin<br>
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>
&gt;&gt;&gt; import sys<br>
&gt;&gt;&gt; sys.modules[&#39;string&#39;] = None<br>
&gt;&gt;&gt; import string<br>
Traceback (most recent call last):<br>
  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;<br>
ImportError: No module named string<br>
&gt;&gt;&gt;<br>
$ python3.1<br>
Python 3.1a0 (py3k:70152, Mar  3 2009, 16:55:42)<br>
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin<br>
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>
&gt;&gt;&gt; import string<br>
&gt;&gt;&gt;<br>
$<br>
<br>
The experiment should be easily repeatable. :-)<br>
<font color="#888888"><br>
--Guido<br>
</font><div><div></div><div class="h5"><br>
On Thu, Jul 23, 2009 at 8:35 PM, Brett Cannon&lt;<a href="mailto:brett@python.org">brett@python.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Jul 23, 2009 at 20:18, Guido van Rossum &lt;<a href="mailto:guido@python.org">guido@python.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; So, I guess, we&#39;ll live with it for a while longer. Given that it<br>
&gt;&gt; managed to evade our attention for so long, I think that&#39;s fine.<br>
&gt;<br>
&gt; Can someone double-check me that the semantics can even be triggered in 3.1?<br>
&gt; I just tried and couldn&#39;t come up with anything. Heck, I quick search for a<br>
&gt; Py_None comparison in 3.1&#39;s import.c turned up nothing useful (other than<br>
&gt; mark_miss() is the function used to set None in sys.modules). We might have<br>
&gt; actually already removed it or made it so that the semantics can&#39;t be<br>
&gt; triggered.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; I agree that there&#39;s no reason for a None result from loaders to be<br>
&gt;&gt; interpreted the same way, assuming that&#39;s not how it works ATM.<br>
&gt;&gt;<br>
&gt;&gt; And we can live with import and importlib differing on this in 3.1<br>
&gt;&gt; (though you could call it a bug in importlib and fix it for 3.1.1 --<br>
&gt;&gt; not sure if you were planning on that).<br>
&gt;<br>
&gt; I can if people can trigger the semantics somehow so I have a test to go by.<br>
&gt; -Brett<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; --Guido<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Jul 23, 2009 at 7:50 PM, Brett Cannon&lt;<a href="mailto:brett@python.org">brett@python.org</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Thu, Jul 23, 2009 at 19:48, Benjamin Peterson &lt;<a href="mailto:benjamin@python.org">benjamin@python.org</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2009/7/23 Brett Cannon &lt;<a href="mailto:brett@python.org">brett@python.org</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; On Thu, Jul 23, 2009 at 19:38, Benjamin Peterson<br>
&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:benjamin@python.org">benjamin@python.org</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; 2009/7/23 Brett Cannon &lt;<a href="mailto:brett@python.org">brett@python.org</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; None in Python 3.1 is really useless in terms of its semantics in<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; relative<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; imports; importlib doesn&#39;t support it and still passes as<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; __import__<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; (at<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; least last time I ran the test suite that way). I thought we had<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; agreed<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; a<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; while back that supporting None was not warranted in Python 3.0?<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; Otherwise I<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; will do whatever work is necessary for this to happen.<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; I think it&#39;s still nice for the rare cases where you need to trick a<br>
&gt;&gt; &gt;&gt; &gt;&gt; module into thinking another one doesn&#39;t exist.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; But None does not strictly mean &quot;I don&#39;t exist&quot;. None is supposed to<br>
&gt;&gt; &gt;&gt; &gt; trigger<br>
&gt;&gt; &gt;&gt; &gt; an another import attempt for the module with a top-level name. It&#39;s<br>
&gt;&gt; &gt;&gt; &gt; that<br>
&gt;&gt; &gt;&gt; &gt; extra import trigger that has no real use in 3.0 and just complicates<br>
&gt;&gt; &gt;&gt; &gt; import<br>
&gt;&gt; &gt;&gt; &gt; semantics (IMO) needlessly. If you want a module to not exist then<br>
&gt;&gt; &gt;&gt; &gt; you<br>
&gt;&gt; &gt;&gt; &gt; either stick something else in (e.g. &#39;42&#39;) or we remove the special<br>
&gt;&gt; &gt;&gt; &gt; semantics for None (which I thought we had).<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I didn&#39;t realize None had other semantics attached to it. (Imagine<br>
&gt;&gt; &gt;&gt; that dealing with import!) +1 for making it simply indicate an<br>
&gt;&gt; &gt;&gt; ImportError.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I&#39;m +0 with having import raise ImportError if None is set in<br>
&gt;&gt; &gt; sys.modules as<br>
&gt;&gt; &gt; long as we don&#39;t suddenly expect loaders to trigger the same thing if<br>
&gt;&gt; &gt; they<br>
&gt;&gt; &gt; return None (actually, as of right now what loaders return count for<br>
&gt;&gt; &gt; nothing, but just want to be clear).<br>
&gt;&gt; &gt; -Brett<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; --Guido van Rossum (home page: <a href="http://www.python.org/~guido/" target="_blank">http://www.python.org/~guido/</a>)<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
<div><div></div><div class="h5">--Guido van Rossum (home page: <a href="http://www.python.org/~guido/" target="_blank">http://www.python.org/~guido/</a>)<br>
</div></div></blockquote></div><br>