Velocity Reviews > Quoting quotes

# Quoting quotes

candide
Guest
Posts: n/a

 02-26-2010
Suppose you have to put into a Python string the following sentence :

The play "All's Well That Ends Well" by Shakespeare

It's easy do it :

>>> print """The play "All's Well That Ends Well" by Shakespeare"""

The play "All's Well That Ends Well" by Shakespeare

Now, change the sentence to this one :

The play "All's Well That Ends Well"

Using triple single quotes works fine

>>> print '''The play "All's Well That Ends Well"'''

The play "All's Well That Ends Well"

But the first method doesn't run correctly :

>>> print """The play "All's Well That Ends Well""""

File "<stdin>", line 1
print """The play "All's Well That Ends Well""""
^
SyntaxError: EOL while scanning single-quoted string
>>>

Any comment ?

Ivan Šipoš
Guest
Posts: n/a

 02-26-2010
On 26.2.2010. 13:29, candide wrote:
> Suppose you have to put into a Python string the following sentence :
>
> The play "All's Well That Ends Well" by Shakespeare
>
> It's easy do it :
>
>
>>>> print """The play "All's Well That Ends Well" by Shakespeare"""
>>>>

> The play "All's Well That Ends Well" by Shakespeare
>
> Now, change the sentence to this one :
>
> The play "All's Well That Ends Well"
>
> Using triple single quotes works fine
>
>
>>>> print '''The play "All's Well That Ends Well"'''
>>>>

> The play "All's Well That Ends Well"
>
>
> But the first method doesn't run correctly :
>
>
>
>>>> print """The play "All's Well That Ends Well""""
>>>>

> File "<stdin>", line 1
> print """The play "All's Well That Ends Well""""
> ^
> SyntaxError: EOL while scanning single-quoted string
>
>>>>

>
> Any comment ?
>
>
>

Well, there's no such thing as """" defined in python.

Victor Stinner
Guest
Posts: n/a

 02-26-2010
Le vendredi 26 février 2010 13:29:04, candide a écrit :
> But the first method doesn't run correctly :
> >>> print """The play "All's Well That Ends Well""""

>
> File "<stdin>", line 1
> print """The play "All's Well That Ends Well""""
> ^
> SyntaxError: EOL while scanning single-quoted string

Use triple simple single quotes:

>>> print '''"All's Well That Ends Well"'''

"All's Well That Ends Well"

--
Victor Stinner
http://www.haypocalc.com/

Steven D'Aprano
Guest
Posts: n/a

 02-26-2010
On Fri, 26 Feb 2010 13:29:04 +0100, candide wrote:

> But the first method doesn't run correctly :
>
>
>>>> print """The play "All's Well That Ends Well""""

> File "<stdin>", line 1
> print """The play "All's Well That Ends Well""""
> ^
> SyntaxError: EOL while scanning single-quoted string
>>>>
>>>>

>
> Any comment ?

Of course not. Quotes can't be nested, so the first time the parser hits
three quote marks, you have reached the end of the string. You then open
a new string with a single quote mark, and then fail to close it. Hence
the EOL while scanning a single-quoted string.

There are many solutions. Here are four:

>>> print """The play "All's Well That Ends Well\""""

The play "All's Well That Ends Well"
>>> print '''The play "All's Well That Ends Well"'''

The play "All's Well That Ends Well"
>>> print 'The play "All\'s Well That Ends Well"'

The play "All's Well That Ends Well"
>>> print 'The play "All' "'" 's Well That Ends Well"'

The play "All's Well That Ends Well"

--
Steven

Grant Edwards
Guest
Posts: n/a

 02-26-2010
On 2010-02-26, Steven D'Aprano <(E-Mail Removed)> wrote:
> On Fri, 26 Feb 2010 13:29:04 +0100, candide wrote:
>
>> But the first method doesn't run correctly :
>>
>>
>>>>> print """The play "All's Well That Ends Well""""

>> File "<stdin>", line 1
>> print """The play "All's Well That Ends Well""""
>> ^
>> SyntaxError: EOL while scanning single-quoted string
>>>>>
>>>>>

>>
>> Any comment ?

>
> Of course not. Quotes can't be nested, so the first time the
> parser hits three quote marks, you have reached the end of the
> string. You then open a new string with a single quote mark,
> and then fail to close it. Hence the EOL while scanning a
> single-quoted string.

IMO, the error message is misleading to many people, since in
many/most contexts the term "single-quoted" refers to this:

'here is a single quoted string'

And not this:

"this is a double-quoted string"

--
Grant Edwards grante Yow! And then we could sit
at on the hoods of cars at
visi.com stop lights!

William Lohrmann
Guest
Posts: n/a

 02-26-2010
On 26 Feb, 13:29, candide <(E-Mail Removed)> wrote:
> Suppose you have to put into a Python string the following sentence :
>
> The play "All's Well That Ends Well" by Shakespeare
>
> It's easy do it :
>
> >>> print """The play "All's Well That Ends Well" by Shakespeare"""

>
> The play "All's Well That Ends Well" by Shakespeare
>
> Now, change the sentence to this one :
>
> The play "All's Well That Ends Well"
>
> Using triple single quotes works fine
>
> >>> print '''The play "All's Well That Ends Well"'''

>
> The play "All's Well That Ends Well"
>
> But the first method doesn't run correctly :
>
> >>> print """The play "All's Well That Ends Well""""

>
> * File "<stdin>", line 1
> * * print """The play "All's Well That Ends Well""""
> * * * * * * * * * * * * * * * * * * * * * * * * * *^
> SyntaxError: EOL while scanning single-quoted string
>
>
>
> Any comment ?

The best thing would be to backslash the single quote: print 'The play
"All\'s Well That Ends Well"'

Lawrence D'Oliveiro
Guest
Posts: n/a

 02-26-2010
In message
<(E-Mail Removed)>, William
Lohrmann wrote:

> The best thing would be to backslash the single quote: print 'The play
> "All\'s Well That Ends Well"'

Backslash-type escapes are the most general solution to this type of
problem. Theyâ€™re also the easiest to apply automatically:

for ch in input_string :
if ch in troublesome_lot :
output backslash + tame representation of ch
else :
output ch
#end if
#end for

candide
Guest
Posts: n/a

 02-28-2010
OK, now I see the point. I was mistaken because I was supposing that
every quote strictly _inside_ the string have to match another quote od
the same type.

Thanks to all for yours responses.