New to Python - block grouping (spaces)

BartC bc at freeuk.com
Thu Apr 16 23:04:35 CEST 2015


On 16/04/2015 18:10, Steven D'Aprano wrote:
> On Thu, 16 Apr 2015 08:51 pm, BartC wrote:
>
>> On 16/04/2015 06:49, Steven D'Aprano wrote:
>>> On Thursday 16 April 2015 14:07, Blake McBride wrote:
>>
>>>> Is there a utility that will allow me to write Python-like code that
>>>> includes some block delimiter that I can see, that converts the code
>>>> into
>>>> runnable Python code?  If so, where can I find it?
>>
>>> No more bugs from accidentally forgetting to use optional braces!
>>
>> You get bugs instead from mistakenly using the wrong indentation or
>> losing the correct indentation (accidentally pressing the wrong key for
>> example).
>
> That's nothing! Python gives you absolutely no protection from accidentally
> typing:
>
>
>      x += 1
>
> when you actually wanted:
>
>     y -= 2

>
> As I'm sure you will agree, it is an easy mistake to make.

I meant hitting Backspace or Delete.

But also, sometimes you post code to Usenet and you find leading tabs 
have been stripped out. With Python code, that's problematical.

> I'm not impressed by arguments "braces protect you from accidentally hitting
> tab too many times (or too few)". Um, okay. Don't people read their own
> code? How do you not notice that you've indented it wrongly?

Take:

  if cond:
     stmt1
     stmt2
     stmt3

and:

  if cond:
     stmt1
     stmt2
  stmt3

which one is correct? Is there a tab too many, or one too few? Or two 
too many? Now, much as I dislike C-style braces, at least it is a little 
more resilient:

  if (cond) {
     stmt1;
     stmt2;
  stmt3;
  }

or:

  if (cond) {
     stmt1;
     stmt2;
  }
     stmt3;

One 'if' clearly has three statements, and the other has two, and you 
are confident enough to fix the tabbing errors without consequences.

> while braces without indentation are horribly opaque:
>
> code code code code code code code { code } code code code { code
> code code { code code code } code { code { code { code code code
> { code code } code code { code code } } } } code } code

It seems to work well enough with expressions:

  x = (a * (b+c) * d) / e

-- 
Bartc



More information about the Python-list mailing list