Annoying octal notation

Steven D'Aprano steve at
Sat Aug 22 04:55:51 CEST 2009

On Fri, 21 Aug 2009 14:48:57 -0500, Derek Martin wrote:

>> It maybe made sense once but this relic of the past should have been
>> consigned to the waste bin of history long ago.
> Sigh.  Nonsense.  I use octal notation *every day*, for two extremely
> prevalent purposes: file creation umask, and Unix file permissions (i.e.
> the chmod() function/command).

And you will still be able to, by explicitly using octal notation.

> I fail to see how 0O012, or even 0o012 is more intelligible than 012.

The first is wrong, bad, wicked, and if I catch anyone using it, they 
will be soundly slapped with a halibut. *wink*

Using O instead of o for octal is so unreadable that I think it should be 
prohibited by the language, no matter that hex notation accepts both x 
and X.

> The latter reads like a typo, 

*Everything* reads like a typo if you're unaware of the syntax being used.

> and the former is virtually
> indistinguishable from 00012, O0012, or many other combinations that
> someone might accidentally type (or intentionally type, having to do
> this in dozens of other programming languages).


> I can see how 012 can
> be confusing to new programmers, but at least it's legible, and the
> great thing about humans is that they can be taught (usually).

And the great thing is that now you get to teach yourself to stop writing 
octal numbers implicitly and be write them explicitly with a leading 0o 
instead :)

It's not just new programmers -- it's any programmer who is unaware of 
the notation (possibly derived from C) that a leading 0 means "octal". 
That's a strange and bizarre notation to use, because 012 is a perfectly 
valid notation for decimal 12, as are 0012, 00012, 000012 and so forth. 
Anyone who has learnt any mathematics beyond the age of six will almost 
certainly expect 012 to equal 12. Having 012 equal 10 comes as a surprise 
even to people who are familiar with octal.

> I for
> one think this change is completely misguided.  More than flushing out
> bugs, it will *cause* them in ubiquity, requiring likely terabytes of
> code to be poured over and fixed.  Changing decades-old behaviors common
> throughout a community for the sake of avoiding a minor inconvenience of
> the n00b is DUMB.

Use of octal isn't common. You've given two cases were octal notation is 
useful, but for every coder who frequently writes umasks on Unix systems, 
there are a thousand who don't.

It's no hardship to write 0o12 instead of 012.


More information about the Python-list mailing list