On 17.03.2016 01:27, Steven D'Aprano wrote:
That post describes the motivating use-case for the introduction
of "if...else", and why break skips the "else" clause:


for x in data:
     if meets_condition(x):
         break
else:
     # raise error or do additional processing


It might help to realise that the "else" clause is misnamed. It should be
called "then":

for x in data:
     block
then:
     block


The "then" (actually "else") block is executed *after* the for-loop, unless
you jump out of that chunk of code by raising an exception, calling return,
or break.

As a beginner, it took me years of misunderstanding before I finally
understood for...else and while...else, because I kept coming back to the
thought that the else block was executed if the for/while block *didn't*
execute.

That's true. I needed to explain this to few people and I always need several attempts/starts to get it right in a simple statement:

'If you do a "break", then "else" is NOT executed.' I think the "NOT" results in heavy mental lifting.

I couldn't get code with for...else to work right and I didn't
understand why until finally the penny dropped and realised that "else"
should be called "then".

That's actually a fine idea. One could even say: "finally".

Best,
Sven
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to