break in a module

Erik Max Francis max at alcyone.com
Thu Jun 16 21:21:35 EDT 2011


Chris Angelico wrote:
> On Fri, Jun 17, 2011 at 10:48 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
>> Perhaps the most sensible alternative is conditional importing:
>>
>> # === module extras.py ===
>>
>> def ham(): pass
>> def cheese(): pass
>> def salad(): pass
>>
>>
>> # === module other.py ===
>>
>> def spam(): pass
>>
>> if not some_condition: from extras import *
>>
> 
> This would, if I understand imports correctly, have ham() operate in
> one namespace and spam() in another. Depending on what's being done,
> that could be quite harmless, or it could be annoying (no sharing
> module-level constants, etc).

No, he's using `from ... import *`.  It dumps it all in the same 
namespace (which is usually why it's frowned upon, but in his example 
it's kind of the point).

I don't see it as a very compelling solution beyond putting code using a 
simple `if`.  And it's still rather hard to imagine a serious use case.

> As to which keyword is used, I would be inclined to go with 'return'
> rather than 'break'. The module is thus a procedure in its own right.
> Of course, that's assuming the feature's actually needed, which isn't
> certain by any means.

Neither makes sense.  `break` exits out of looping structures, which the 
top-level code of a module most certainly is not.  `return` returns out 
of functions or methods and -- most importantly -- _returns something_. 
  (`return` without an argument returns None).  Modules have no facility 
to return anything, nor would it make much sense at all to do so.

This is an example of a problem that simply does not need solving with 
additional language changes:  There are already perfectly good (and, 
perhaps more importantly, clear) facilities to do whatever it is you 
want to do.  If you want to exit, call `sys.exit`.  If you want to 
conditionally execute some code, use `if`.  If you want to indicate an 
exceptional condition, raise an exception.

-- 
Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
  San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis
   Human salvation lies in the hands of the creatively maladjusted.
    -- Dr. Martin Luther King, Jr.



More information about the Python-list mailing list