On Wed, 2004-07-28 at 06:56, Jim Fulton wrote:
Do you think it's practical to limit the effects of module import to sys.modules, even by convention? Could we say that it is a bug for code executed during module import to mutate other modules, including mutating objects contained in those other modules?
It's fairly common practice to execute code at module scope, as a side-effect of importation. I've always been uncomfortable with that idiom for many of the reasons you point out, but it is a darn convenient place to do such things. I wonder if we can't define a protocol for executing code at module scope, but only if the module is successfully imported. The idea is that we'd define something like an __init__() for modules that would only get executed after the module was imported, and if there were any failures in importing, it wouldn't get called. We'd have to handle chained imports though. I haven't thought through all the implications of that but I can imagine it will get messy. You probably don't want to execute any __init__()'s until all imports are finished, you probably want to execute them in the order you saw them, and you don't want any exceptions raised in __init__()'s to be deemed an ImportError worthy of sys.modules deletion. Maybe this isn't feasible, but I throw it out there as a thought. -Barry