[Python-ideas] breaking out of module execution

Mark Shannon mark at hotpy.org
Tue Apr 24 22:15:57 CEST 2012


This has to be the only few feature request that can implemented by 
removing code :)

I implemented this by deleting 2 lines of code from the compiler.

M.-A. Lemburg wrote:
> Antoine Pitrou wrote:
>> On Tue, 24 Apr 2012 13:23:53 -0600
>> Eric Snow <ericsnowcurrently at gmail.com>
>> wrote:
>>> In a function you can use a return statement to break out of execution
>>> in the middle of the function.  With modules you have no recourse.
>>> This is akin to return statements being allowed only at the end of a
>>> function.
>>>
>>> There are a small number of ways you can work around this, but they
>>> aren't great.  This includes using wrapper modules or import hooks or
>>> sometimes from-import-*.  Otherwise, if your module's execution is
>>> conditional, you end up indenting everything inside an if/else
>>> statement.
>> I think good practice should lead you to put your initialization code
>> in a dedicated function that you call from your module toplevel. In
>> this case, breaking out of execution is a matter of adding a return
>> statement.
> 
> True, but that doesn't prevent import from being run, functions and
> classes from being defined and resources being bound which are not
> going to get used.
> 
> Think of code like this (let's assume the "break" statement is used
> for stopping module execution):
> 
> """
> #
> # MyModule
> #
> 
> ### Try using the fast variant
> 
> try:
>     from MyModule_C_Extension import *
> except ImportError:
>     pass
> else:
>     # Stop execution of the module code object right here
>     break

It will have to be "return" not "break".

> 
> ### Ah, well, so go ahead with the slow version
> 
> import os, sys
> from MyOtherPackage import foo, bar, baz
> 
> class MyClass:
>     ...
> 
> def MyFunc(a,b,c):
>     ...
> 
> def main():
>     ...
> 
> if __name__ == '__main__':
>     main()
> """
> 
> You can solve this by using two separate modules and a top-level
> module to switch between the implementations, but that's cumbersome
> if you have more than just a few of such modules in a package.
> 




More information about the Python-ideas mailing list