How coding in Python is bad for you

Steven D'Aprano steve+comp.lang.python at
Mon Jan 23 23:22:11 EST 2017

On Tuesday 24 January 2017 13:38, Chris Angelico wrote:

> On Tue, Jan 24, 2017 at 12:47 PM, BartC <bc at> wrote:

>> Take the same code with block
>> delimiters, and take out that same indent:
>> if 0 then
>>     print ("one")
>> print ("two")
>> endif
>> print ("three")
>> It still compiles, it still runs, and still shows the correct "three" as
>> output.
> My point is that you *assume* that showing just "three" is the correct
> behaviour. Why? Why do you automatically assume that the indentation
> is wrong and the endif is correct? All you have is that the two
> disagree.

It's Bart's special language, so the correct behaviour is whatever he says it 
is :-)

But more seriously, it's easy to typo an extra indent. It's harder to typo 
"endif" when you actually meant to type, oh, "ending = 1 if condition else 3", 
say. So faced with ambiguity, and the insistence that the right way to break 
ambiguity is to guess ("Do What I Mean, dammit!!!") the most likely guess is 
that the indentation is wrong.

But not guaranteed. That's the thing about being ambiguous -- there is a chance 
that the indentation is correct.

This *especially* applies to languages like C, when open/close delimiters 
optional if the block is only a single statement, and where the delimiters are 
only a single character.

And sure enough, C is prone to indent/brace mismatch errors.

When I design my killer language, it won't fail when there's a mismatch between 
indentation and open/close delimiters. Nor will it just give priority to one or 
the other. Instead, it will learn from your errors and typos in order to 
determine which you are statistically more likely to want, and silently compile 
the code that way. But without changing the source code, of course.

"Ever since I learned about confirmation bias, I've been seeing 
it everywhere." - Jon Ronson

More information about the Python-list mailing list