[Python-Dev] Fix import errors to have data

Guido van Rossum guido at python.org
Mon Aug 2 20:40:45 CEST 2004


> > > Circular imports, to be made consistent, would need
> > > something like a final "commit" after all imports succeeded.
> > 
> > Silly idea.  Typically, circular imports aren't planned, they just
> > happen, and (usually) just happen to work.
> 
> I thought Christian meant this was something that would
> be done automatically, not something the user would have
> to do explicitly.

OK, I misunderstood then.  Apologies to Christian.

> Maybe it could be as simple as saving a snapshot of
> sys.modules whenever importing of a module is begun,
> and if execution of its body doesn't complete, restoring
> the snapshot?

That sounds like overkill -- any modules that don't participate in the
cycle but happen to be imported by one of the modules in the cycle
would also be deleted.

I still expect that the solution that Tim just checked in (delete any
module that failed to complete execution) will solve most of the
problems encountered in real life.  I'm aware of the case you describe
here:

> No, it's not. If A and B import each other, and A fails after
> importing B, then B ends up with a reference to a broken A
> even though it executed without error.

But I don't lose sleep over it; this would only be a problem if the
main code attempts to import A but suppresses the import error *and*
also uses B directly.  This doesn't seem to be a likely scenario
(modules that can be missed rarely participate in cycles).

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list