Mailing List Archive

Raw strings ending with a backslash
Now that we have a new parser for CPython, can we fix the old gotcha
that raw strings cannot end in a backslash?

Its an FAQ and has come up again on the bug tracker.

https://docs.python.org/3/faq/design.html#id26

https://github.com/python/cpython/issues/93314



--
Steve
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/A437MSH3QO6CG2JIZHDTEDVUZZ2TCRYI/
Code of Conduct: http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
28.05.22 12:22, Steven D'Aprano ????:
> Now that we have a new parser for CPython, can we fix the old gotcha
> that raw strings cannot end in a backslash?
>
> Its an FAQ and has come up again on the bug tracker.
>
> https://docs.python.org/3/faq/design.html#id26
>
> https://github.com/python/cpython/issues/93314

I do not think that we can allow this, and it is not related to parser.

Few years ago I experimented with such change:
https://github.com/python/cpython/pull/15217

You can see that it breaks even some stdlib code, and it will definitely
break many third-party packages and examples. Technically we can do
this, but the benefit is small in comparison with the cost.

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/WWWRFQK4AG52GD3L6WT6QLRGTY2VQRQ2/
Code of Conduct: http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
That PR seems to make \' and \" not special in general right?

I think this is a more limited proposal, to only change the behavior when \
is at the end of a string, so the only behavior difference would never
receiving the error "SyntaxError: EOL while scanning string literal"

In which case there should be no backwards compatibility issue.

Damian

On Sat, May 28, 2022 at 12:20 PM Serhiy Storchaka <storchaka@gmail.com>
wrote:

> 28.05.22 12:22, Steven D'Aprano ????:
> > Now that we have a new parser for CPython, can we fix the old gotcha
> > that raw strings cannot end in a backslash?
> >
> > Its an FAQ and has come up again on the bug tracker.
> >
> > https://docs.python.org/3/faq/design.html#id26
> >
> > https://github.com/python/cpython/issues/93314
>
> I do not think that we can allow this, and it is not related to parser.
>
> Few years ago I experimented with such change:
> https://github.com/python/cpython/pull/15217
>
> You can see that it breaks even some stdlib code, and it will definitely
> break many third-party packages and examples. Technically we can do
> this, but the benefit is small in comparison with the cost.
>
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-leave@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/WWWRFQK4AG52GD3L6WT6QLRGTY2VQRQ2/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
Re: Raw strings ending with a backslash [ In reply to ]
Personally I'd expect these two lines to do the same thing, whatever that
thing is:

path = 'C:\'
path = ('C:\')

Barney

On Sat, 28 May 2022 at 12:59, Damian Shaw <damian.peter.shaw@gmail.com>
wrote:

> That PR seems to make \' and \" not special in general right?
>
> I think this is a more limited proposal, to only change the behavior when
> \ is at the end of a string, so the only behavior difference would never
> receiving the error "SyntaxError: EOL while scanning string literal"
>
> In which case there should be no backwards compatibility issue.
>
> Damian
>
> On Sat, May 28, 2022 at 12:20 PM Serhiy Storchaka <storchaka@gmail.com>
> wrote:
>
>> 28.05.22 12:22, Steven D'Aprano ????:
>> > Now that we have a new parser for CPython, can we fix the old gotcha
>> > that raw strings cannot end in a backslash?
>> >
>> > Its an FAQ and has come up again on the bug tracker.
>> >
>> > https://docs.python.org/3/faq/design.html#id26
>> >
>> > https://github.com/python/cpython/issues/93314
>>
>> I do not think that we can allow this, and it is not related to parser.
>>
>> Few years ago I experimented with such change:
>> https://github.com/python/cpython/pull/15217
>>
>> You can see that it breaks even some stdlib code, and it will definitely
>> break many third-party packages and examples. Technically we can do
>> this, but the benefit is small in comparison with the cost.
>>
>> _______________________________________________
>> Python-Dev mailing list -- python-dev@python.org
>> To unsubscribe send an email to python-dev-leave@python.org
>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-dev@python.org/message/WWWRFQK4AG52GD3L6WT6QLRGTY2VQRQ2/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-leave@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/O3STZ54BRQ3T352PIMNEZWCRBGP6FE2O/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
Re: Raw strings ending with a backslash [ In reply to ]
28.05.22 14:57, Damian Shaw ????:
> That PR seems to make \' and \" not special in general right?
>
> I think this is a more limited proposal, to only change the behavior
> when \ is at the end of a string, so the only behavior difference would
> never receiving the error "SyntaxError: EOL while scanning string literal"
>
> In which case there should be no backwards compatibility issue.

How do you know that it is at the end of a string?

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/BFGT3H57CFTEOKWA3NXBSPUDE4JF4C2H/
Code of Conduct: http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
On 5/28/2022 7:57 AM, Damian Shaw wrote:
> That PR seems to make \' and \" not special in general right?
>
> I think this is a more limited proposal, to only change the behavior
> when \ is at the end of a string, so the only behavior difference
> would never receiving the error "SyntaxError: EOL while scanning
> string literal"

How would you know where the end of a string is? I think this is one of
those things that's easy to look at for a human and figure out the
intent, but not so easy for the lexer, without some heuristics and
backtracking. If the trailing single quote is removed below, it changes
from "backslash in the middle of a string" to "backslash at the end of a
string, followed by an arbitrary expression.

r'\' + "foo"'

Eric

>
> In which case there should be no backwards compatibility issue.
>
> Damian
>
> On Sat, May 28, 2022 at 12:20 PM Serhiy Storchaka
> <storchaka@gmail.com> wrote:
>
> 28.05.22 12:22, Steven D'Aprano ????:
> > Now that we have a new parser for CPython, can we fix the old gotcha
> > that raw strings cannot end in a backslash?
> >
> > Its an FAQ and has come up again on the bug tracker.
> >
> > https://docs.python.org/3/faq/design.html#id26
> >
> > https://github.com/python/cpython/issues/93314
>
> I do not think that we can allow this, and it is not related to
> parser.
>
> Few years ago I experimented with such change:
> https://github.com/python/cpython/pull/15217
>
> You can see that it breaks even some stdlib code, and it will
> definitely
> break many third-party packages and examples. Technically we can do
> this, but the benefit is small in comparison with the cost.
>
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-leave@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/WWWRFQK4AG52GD3L6WT6QLRGTY2VQRQ2/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
>
> _______________________________________________
> Python-Dev mailing list --python-dev@python.org
> To unsubscribe send an email topython-dev-leave@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived athttps://mail.python.org/archives/list/python-dev@python.org/message/O3STZ54BRQ3T352PIMNEZWCRBGP6FE2O/
> Code of Conduct:http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
On 2022-05-28 13:17, Serhiy Storchaka wrote:
> 28.05.22 14:57, Damian Shaw ????:
>> That PR seems to make \' and \" not special in general right?
>>
>> I think this is a more limited proposal, to only change the behavior
>> when \ is at the end of a string, so the only behavior difference would
>> never receiving the error "SyntaxError: EOL while scanning string literal"
>>
>> In which case there should be no backwards compatibility issue.
>
> How do you know that it is at the end of a string?
>
It would also affect triple-quoted strings.

Here's an idea: prefix rr ("really raw") that would treat all
backslashes literally.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/5U27KKDGHTGOWNXNCMNKZSSPZXD62RQ7/
Code of Conduct: http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
My understanding was that was part of the question being asked, is it
possible to know what with the new PEG parser?

On Sat, May 28, 2022 at 1:25 PM Serhiy Storchaka <storchaka@gmail.com>
wrote:

> 28.05.22 14:57, Damian Shaw ????:
> > That PR seems to make \' and \" not special in general right?
> >
> > I think this is a more limited proposal, to only change the behavior
> > when \ is at the end of a string, so the only behavior difference would
> > never receiving the error "SyntaxError: EOL while scanning string
> literal"
> >
> > In which case there should be no backwards compatibility issue.
>
> How do you know that it is at the end of a string?
>
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-leave@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/BFGT3H57CFTEOKWA3NXBSPUDE4JF4C2H/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
Re: Raw strings ending with a backslash [ In reply to ]
28.05.22 18:03, Damian Shaw ????:
> My understanding was that was part of the question being asked, is it
> possible to know what with the new PEG parser?

You first need to define what is the end of a string. And I think it is
not relevant to the grammar parser.

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/I5FLGQ3KVDXVITFTW6LO2KADODKTGZ5O/
Code of Conduct: http://python.org/psf/codeofconduct/
Re: Raw strings ending with a backslash [ In reply to ]
Thank you to everyone who responded, it is now clear to me that this
genuinely is a feature, not a bug or limitation of the parser or lexer.
And that there is code relying on that behaviour, including in the
stdlib, so we shouldn't change it even if we could.


--
Steve
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-leave@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/RXA3TG5WN6YJ4HUVEUEOJWKYL27FPZVI/
Code of Conduct: http://python.org/psf/codeofconduct/