replacing `else` with `then` in `for` and `try`

bartc bc at freeuk.com
Wed Nov 1 21:42:00 EDT 2017


On 02/11/2017 01:06, Steve D'Aprano wrote:
> On Thu, 2 Nov 2017 08:12 am, Alexey Muranov wrote:
> 
>> Hello,
>>
>> what do you think about the idea of replacing "`else`" with "`then`" in
>> the contexts of `for` and `try`?
> 
> 
> Yes, this, exactly!!!
> 
> (For while and for loops, but not try -- see below.)
> 
> I have argued this for many years. The current choice of "else" is painfully
> misleading, and it causes people (including myself) to wrongly guess that
> the "else" block runs only if the for/while block doesn't run at all:
> 
> 
> # This is wrong!
> for x in sequence:
>      ...
> else:
>      print("sequence is empty")
> 
> 
> The actually semantics of "else" is that the block is UNCONDITIONALLY run
> after the for/while loop completes,

/If/ it completes, and /when/ it completes. Otherwise why bother with 
using 'else'? Just have the code immediately following the loop.

And there are some circumstances where the 'else' part is never executed.

But if people prefer a different keyword, then why not? I think 'then' 
can be used, without impacting its use as an identifier, because it will 
always be followed by ":". Of course you would need to allow both "else" 
and "then" for backwards compatibility.

-- 
bartc



More information about the Python-list mailing list