[Python-ideas] for/except/else syntax
ilya.nikokoshev at gmail.com
Wed Oct 7 21:18:59 CEST 2009
I was actually surprise to learn that for/else is already part of
Python. I would be more happy with 'if not break', but anyway.
As for `loop.empty`, this is probably what I would reserve if I was
designing language from scratch, but it does seem very unpythonic to
me. Note though that you can do
empty = object() # sentinel
i = empty
for i in SEQ:
if i is empty:
B # suite_if_loop_body_is_not_executed
This requires just one more line (i=empty) per loop compared to other
proposals and is completely unambiguos to both human and computer.
Moreover, you can put `empty` into builtins without breaking existing
programs (however, this idiom breaks in a weird case of
On Wed, Oct 7, 2009 at 11:00 AM, Yuvgoog Greenle <ubershmekel at gmail.com> wrote:
> I don't like your "except" and "else" only because it's not obvious
> when they execute.
> btw your example breaks the current "for..else" search idiom. C,
> suite_if_loop_is_not_broken, should be labelled
> suite_if_loop_is_not_broken_and_not_empty in your example code.
> As I understand it, pythoneers need a way to know what happened with a
> previous loop. Did it break? Did it execute at all? The answer to both
> questions is either True or False and developers need these answers
> only after the loop finished. If python wasn't in over it's head with
> reserved words I would suggest adding "loop":
> for i in SEQ:
> if not loop.broke:
> C # suite_if_loop_is_not_broken
> elif loop.empty:
> B # suite_if_loop_body_is_not_executed
> For optimization I would suggest the "loop" variable only be
> instantiated if it's referenced. Also, there may be better names for
> "loop", "broke" and "empty".
> Two drawbacks:
> 1. python's in over it's head with reserved words.
> 2. developers might want to use the "loop" variable a mile down from
> the loop which would be ugly but their fault.
> I'm writing a summary of the previous for/else thread and hope that by
> the time I finish that (a week+), someone will invent a readable,
> low-cost syntax (optional but awesome if it can handle all 4:
> break/not break/empty/not empty).
> On Wed, Oct 7, 2009 at 6:06 AM, Bruce Leban <bruce at leapyear.org> wrote:
>> Here you go:
>> do_except = True
>> for i in SEQ:
>> do_except = False
>> if not do_except:
>> C # suite_if_loop_is_not_broken
>> if do_except:
>> B # suite_if_loop_body_is_not_executed
>> --- Bruce
>> On Tue, Oct 6, 2009 at 8:53 PM, Guido van Rossum <guido at python.org> wrote:
>>> On Tue, Oct 6, 2009 at 8:46 PM, Bruce Leban <bruce at leapyear.org> wrote:
>>> > Switching gears a bit, here's what I want:
>>> > for_stmt ::= "for" target_list "in" expression_list ":" suite_loop_body
>>> > ["except" ":" suite_if_loop_body_is_not_executed] ["else" ":"
>>> > suite_if_loop_is_not_broken]
>>> > The except and else appear in this order to make it clear that except
>>> > takes
>>> > precedence. If the loop body is not executed at all then both conditions
>>> > are
>>> > true but it obviously is only useful if except takes precedence.
>>> > Comments?
>>> I'm sure it's obvious to you what the except clause should do, but it
>>> isn't to me. :-( Assuming you're not proposing we change the meaning
>>> of else in the absence of except, and that its meaning together with
>>> except is a logical extension of this, can you show how we should
>>> translate a for-loop with an except clause into current Python? Say,
>>> what would I be writing today to get the exact effect of your proposed
>>> for i in SEQ:
>>> --Guido van Rossum (home page: http://www.python.org/~guido/)
>> Python-ideas mailing list
>> Python-ideas at python.org
> Python-ideas mailing list
> Python-ideas at python.org
More information about the Python-ideas