[Python-ideas] breaking out of module execution

Steven D'Aprano steve at pearwood.info
Wed Apr 25 02:55:07 CEST 2012


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

>>>> 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.
> 
> Ok, you got me :-) Should've paid more attention.


I think you have inadvertently demonstrated that that this proposed feature is 
hard to use correctly. Possibly even harder to use than existing idioms for 
solving the problems this is meant to solve. If the user does use it, they 
will likely need to duplicate code, which encourages copy-and-paste programming.

Even if break at the module level is useful on rare occasions, I think the 
usefulness is far outweighed by the costs:

- hard to use correctly, hence code using this feature risks being buggy
- encourages premature micro-optimization, or at least the illusion of
   optimization
- encourages or requires duplicate code and copy-and-paste programming
- complicates the top-level program flow

Today, if you successfully import a module, you know that all the top-level 
code in that module was executed. If this feature is added, you cannot be sure 
what top-level code was reached unless you scan through all the code above it.

In my opinion, this is an attractive nuisance.

-1 on the feature.



-- 
Steven




More information about the Python-ideas mailing list