[Python-ideas] for/except/else syntax
Arnaud Delobelle
arnodel at googlemail.com
Wed Oct 7 11:15:48 CEST 2009
2009/10/7 Yuvgoog Greenle <ubershmekel at gmail.com>:
> 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:
> A
> 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).
Here's an idea with current syntax (python < 3):
class Loop(object):
def __init__(self, iterable):
self.iterable = iterable
def __iter__(self):
self.broken = True
self.empty = True
for i in self.iterable:
self.empty = False
yield i
self.broken = False
# Example:
for string in 'spam', 'bot', '':
loop = Loop(string)
for i in loop:
if i == 'a':
break
print repr(string), ':'
if loop.broken: print 'broken',
if loop.empty: print 'empty',
print
# Output:
'spam' : broken
'bot' :
'' : empty
--
Arnaud
More information about the Python-ideas
mailing list