[Python-Dev] clarifying PEP 302 loader responsibilities upon failure

Brett Cannon bcannon at gmail.com
Sun Feb 15 07:07:07 CET 2009


On Mon, Feb 9, 2009 at 14:02, Guido van Rossum <guido at python.org> wrote:

> On Mon, Feb 9, 2009 at 1:56 PM,  <bcannon at gmail.com> wrote:
> > Guido and I were discussing what a loader should be responsible for when
> > load_module is called and an exception is raised in relation to
> sys.modules
> > as PEP 302 says nothing about the topic.
> >
> > We both agree that if the loader added a module to sys.modules it should
> be
> > removed, otherwise it should be left alone.
> >
> > Assuming no one disagrees I will update the PEP to specify that this is
> the
> > expected job of loaders.
>
> (Note that currently most loaders we've looked at end up removing the
> module unconditionally, as this is what PyImport_ExecCodeModuleEx()
> does. PyImport_ReloadModule() has a super-duper hack to save the
> module object and put it back into sys.modules:
>
>        if (newm == NULL) {
>                /* load_module probably removed name from modules because of
>                 * the error.  Put back the original module object.  We're
>                 * going to return NULL in this case regardless of whether
>                 * replacing name succeeds, so the return value is ignored.
>                 */
>                PyDict_SetItemString(modules, name, m);
>        }
>
> If we could get conforming loaders to behave as proposed, we wouldn't
> need this ugly hack.
>

PEP 302 was updated in r69632.

-Brett
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20090214/0aa357f9/attachment.htm>


More information about the Python-Dev mailing list