[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Quoting quotes

candide

2/26/2010 12:29:00 PM

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 ?


7 Answers

mailing list

2/26/2010 12:37:00 PM

0

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

2/26/2010 12:43:00 PM

0

Steven D'Aprano

2/26/2010 2:05:00 PM

0

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

Dave \Crash\ Dummy

2/26/2010 3:04:00 PM

0

On 2010-02-26, Steven D'Aprano <steve@REMOVE-THIS-cybersource.com.au> 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

2/26/2010 4:05:00 PM

0

On 26 Feb, 13:29, candide <cand...@free.invalid> 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

2/26/2010 10:22:00 PM

0

In message
<bda4748c-49ec-4383-81c1-7baaae567180@l19g2000yqb.googlegroups.com>, 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

2/28/2010 10:46:00 PM

0

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.