[Python-ideas] breaking out of module execution

Georg Brandl g.brandl at gmx.net
Tue Apr 24 22:29:28 CEST 2012


On 24.04.2012 22:20, M.-A. Lemburg wrote:

>>> 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()
>>> """
>> 
>> There's a subtle bug here that shows that the proposed feature has its
>> awkward points:  you probably want to execute the "if __name__ == '__main__'"
>> block in the C extension case as well.
> 
> No, you don't :-) If you would have wanted that to happen, you'd
> put the "if __name__..." into the else: branch.

Not sure I understand.  Your example code is flawed because it doesn't execute
the main() for the C extension case.  Of course you can duplicate the code in
the else branch, but you didn't do it in the first place, which was the bug.

Georg




More information about the Python-ideas mailing list