On Sat, Nov 10, 2018 at 3:19 PM Steven D'Aprano <st...@pearwood.info> wrote:
>
> On Sat, Nov 10, 2018 at 12:56:07PM +1100, Chris Angelico wrote:
>
> > Not ambiguous. It takes as many valid octal digits as it can.
>
> What is the rationale for that? Hex escapes don't.

Irrelevant to whether it's ambiguous or not.

> > "Up to" means that one or two digits can also define a character. For
> > obvious reasons, it has to take digits greedily (otherwise "\777"
> > would be "\x07" followed by "77"), and it's not an error to have fewer
> > digits.
>
> In hindsight, I think we should have insisted that octal escapes must
> always be three digits, just as hex escapes are always two. The status
> quo has too much magical "Do What I Mean" in it for my liking:
>
> py> '\509\51'  # pair of brackets surrounding a nine
> '(9)'
> py> '\507\51'  # pair of brackets surrounding a seven
> 'G)'
>
> Dammit Python, that's not what I meant!

How often do you actually do that with octal escapes, though? Ever had
actual real-world situations where this comes up? I don't recall
*ever* coming across a problem where sometimes I have an octal escape
followed by a nine, and other times by a different digit. I also do
not recall often wanting an octal escape followed by a digit, even
without that confusion.

> > > what do you say
> > > of deprecating any r"\[0-9]{1,3}" sequence that don't match full 3
> > > octal digits, and yield a syntax error for that from Python 3.9 (or
> > > 3.10) on?
> >
> > Nope. Would break code for no good reason.
>
> There's a good reason: to make the behaviour more sensible and less
> confusing and have fewer "oops, that's not what I wanted" bugs. But we
> should have made that change for 3.0. Now, I agree: it would be breakage
> where the benefit doesn't outweigh the cost.

We can debate whether it would be, in the abstract, better to mandate
exactly three digits, or to allow fewer. But I think we're all agreed
that it is nowhere _near_ enough of a problem to justify the breakage.
I perhaps exaggerated slightly in saying "no" good reason, but
certainly not enough to consider the change.

> Maybe in Python 5000.
>
> In the meantime, one or two digit octal escapes ought to be a linter
> warning.

Maybe. Or just have the editor colour the octal escape differently;
that way, the end of the colour will tell you if the language is
misinterpreting your intentions. Either way, yeah, something that
tooling can help with.

ChrisA
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to