[Python-Dev] clarifying PEP 302 loader responsibilities upon failure (original) (raw)
Brett Cannon bcannon at gmail.com
Sun Feb 15 07:07:07 CET 2009
- Previous message: [Python-Dev] clarifying PEP 302 loader responsibilities upon failure
- Next message: [Python-Dev] PyCon 2009: Call for sprint projects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 > loadmodule 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 PyImportExecCodeModuleEx() does. PyImportReloadModule() has a super-duper hack to save the module object and put it back into sys.modules: if (newm == NULL) { /* loadmodule 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. */ PyDictSetItemString(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>
- Previous message: [Python-Dev] clarifying PEP 302 loader responsibilities upon failure
- Next message: [Python-Dev] PyCon 2009: Call for sprint projects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]