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