[Python-ideas] breaking out of module execution

M.-A. Lemburg mal at egenix.com
Tue Apr 24 21:58:35 CEST 2012


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

### 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.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Apr 24 2012)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________
2012-04-28: PythonCamp 2012, Cologne, Germany               4 days to go

::: Try our new mxODBC.Connect Python Database Interface for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/



More information about the Python-ideas mailing list