Why not allow empty code blocks?
neceros at gmail.com
neceros at gmail.com
Sun Jul 24 14:27:22 EDT 2016
On Sunday, July 24, 2016 at 6:09:40 AM UTC-7, BartC wrote:
> On 24/07/2016 11:45, BartC wrote:
> > On 24/07/2016 11:35, BartC wrote:
>
> > 'end' to terminate a block can be emulated of course:
> >
> > end=0
> >
> > def fn(a):
> > if a<=1:
> > return 1
> > else:
> > return fn(a-1)
> > end
> > end
>
> Actually this is a good example of how tabs can go wrong (and how the
> tab system /is/ fragile - sorry but it is).
>
> I almost certainly wrote the above using 4 and 8 spaces for the tabs,
> except for the 'return 1' where I must have used an actual tab by
> mistake. (And I tested it now by doing just that, and posting in alt.test.)
>
> So the original /looked/ correct in my Thunderbird newsreader before I
> posted. But after I posted, that tab somehow got changed to 4 spaces, as
> it now looks wrong.
>
> In this instance, the result won't compile. But it's not hard to imagine
> a much larger program where that change would go unnoticed, and the
> result is still valid code**.
>
> Then anyone copying and pasting the posted code, would have a program
> with a bug in it.
>
> Mysteriously however, Chris Angelico's reply which quoted my post,
> showed a properly tabbed version! (Unless he fixed it manually.)
>
> (** Where working code has been posted, then Python will have picked up
> inconsistencies where tabs and spaces are mixed. However take this code:
>
> def fn():
> <tab>if a:
> <8 spaces>pass
>
> This looks fine in my editor when <tab> is expanded to 4 spaces:
>
> def fn():
> if a:
> pass
>
> Python however doesn't like it (Python 2 doesn't anyway), because it
> somehow assumes tabs expand to 8 spaces, so that the two indents look
> like this to it:
>
> def fn():
> if a:
> pass
>
> So I can see a lot of problems whenever tabs are expanded differently:
>
> a=1
> b=0
>
> if a:
> <tab>if b:
> <tab><tab>print ("One")
> <8 spaces>print ("Two")
>
> In my editor with 4-space tabs, it looks like the code will print
> nothing as the two print lines are aligned within the 'if b:' block. But
> in Python 2, it will print "Two". Python 3 more wisely reports the
> inconsistency.)
>
> --
> Bartc
Don't use tabs. Ever. It's simple.
More information about the Python-list
mailing list